Bonjour,

Dans une table j'ai le champ expired, et je veux un resultat SQL par ex: 3 jours par rapport a NOW();

est-ce possible uniquement en SQL ?

Merci

6 réponses


Hello agencep,

Pour calculer la différence entre deux dates en SQL tu peux utiliser la fonction datediff (http://sql.sh/fonctions/datediff)

agencep
Auteur

Hello AntoineCourtin,

Ok mais est ce que DATEDIFF prends en charge les variable PHP ?
je veux dire

SELECT DATEDIFF( date1, date2 ) = 3 FROM .....

Au faite je veux ressortir les données dont la date EXPIRED est supérieur à NOW();

Que veux-tu dire par "prend en charge les variables PHP" ?

agencep
Auteur

Au faite la solution que j'ai trouvé pour l'instant mais qui demande beaucoup de traitement après

 $ExpireIn = 3;
$var = $this->MODEL->find('all', [
            'fields' => [
                'DATEDIFF(MODEL.expired,NOW()) = ' . $ExpireIn . ' AS ExpireIn',
                'MODEL.name',
                'MODEL.id'
            ],
            'conditions' => [
                'MODEL.online' => 1,
                ],
        ]);

Le resultat est :

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [ExpireIn] => 0
                )

            [MODEL] => Array
                (
                    [name] => xxxxxxxxx
                    [id] => 2
                )

        )
)

Il se peut que tu fasses une requête avec 2 formats de dates différents. Par ex. : un DATE avec un DATETIME, ou un format DATETIME en 'm/d/Y H:I' et l'autre en 'Y-m-d H:i:s'.

Au quel cas, tu n'obtiens qu'un résultat nul à cause de ce type de conflit...
Par ailleurs, puisque tout fonctionne sous PHP, pourquoi ne pas faire ce type de calcul en PHP plutôt que par MySQL ? Une seule requête MySQL et tout le reste est calculé par PHP, avec un gain en performance et c'est plus facile à debugger. Non ?

agencep
Auteur

Bonjour mzkd,

Le MySQL est plys rapide quand il s'agit de beaucoup de données, c'est la raison de mon choix dans la rerequête.