Mysql avec nombre de jours restant

Par agencep, il y a 10 ans


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

Antoine Courtin, il y a 10 ans

Hello agencep,

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

agencep, il y a 10 ans

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();

Antoine Courtin, il y a 10 ans

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

agencep, il y a 10 ans

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 ) ) )
mzkd, il y a 10 ans

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, il y a 10 ans

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.