Problème avec la comparaison de dates !

Eléphant du PHP | 259 Messages

04 juil. 2007, 12:05

Bonjour,

J'ai une table avec date_debut et date_fin.

Et j'aimerais lors d'une requête récupérer les enregistrements qui sont actif (c'est a dire les enregistrements où la date d'aujourd'hui est entre la date de début et la date de fin).

Donc je récupére la date d'aujourd'hui : $date_auj = date("Y-m-d");

Ensuite j'ai fait cette requête :
$req2 = mysql_query("SELECT * FROM matable WHERE date_debut > '$date_auj'  AND date_fin < '$date_auj' ");
Mais ça ne marche pas.. ça me renvoit 0 alors qu'il y a bien des enregistrements.

Je pense que je m'y "prend mal", je ne sais pas si ma requête est bonne ou non...

J'espére que vous pourrez m'aider. Merci d'avance pour vos réponses.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 juil. 2007, 12:10

Juste un peu de logique :

Code : Tout sélectionner

WHERE date_debut > '$date_auj' AND date_fin < '$date_auj'
Tu listes les enregistrement qui commencent après aujourd'hui (date_debut > '$date_auj') ET qui se terminent avant aujourd'hui (date_fin < '$date_auj') ... à mon avis tu ne dois pas en avoir beaucoup ;)

Tu peux également regarder du côté de la commande BETWEEN en sql :

Code : Tout sélectionner

WHERE maDate BETWEEN date1 AND date2
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 259 Messages

04 juil. 2007, 12:16

Est ce que je peux mettre :

Code : Tout sélectionner

WHERE $date_auj BETWEEN date_debut AND date_fin
car $date_auj n'est pas un champ de ma table ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 juil. 2007, 12:49

C'est une très bonne question... faudrait essayer pour voir si le résultat retourné est celui attendu :)

(en oubliant pas d'ajouter les apostrophes autour de ta date pour la délimiter ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 259 Messages

04 juil. 2007, 14:39

oui ça fonctionne...

Je croyais que dans une requête on ne pouvait mettre que les champs de la table..mais apparement non .. tant mieux :)

Eléphanteau du PHP | 29 Messages

04 juil. 2007, 14:52

PHP, je débute,
mySQl connais pas

mais en SQL
tu peux faire un tas de choses dans les clauses WHERE
where 1 = 1 ramène tous les enregistrements
where 1 <> 1 n'en ramène aucun
where champ1 = fonction(champ2)

les jointures (clauses ON) sont un peu plus sensibles (selon le SGBD)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 juil. 2007, 15:05

Heu, juste une correction, au lieu d'utiliser la date système de PHP utilisez plutôt celle du serveur Mysql, c'est plus judicieux et ça vous économise du code PHP.

Correction:

Code : Tout sélectionner

WHERE Now() BETWEEN date_debut AND date_fin
Sauf si le serveur Web (php) se trouve à Taïwan, le serveur Mysql à Malibu et l'entreprise concernée à Kinshasa! là il faut cogiter :lol:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 259 Messages

04 juil. 2007, 15:18

Merci pour ces précisions :wink:

Mammouth du PHP | 693 Messages

04 juil. 2007, 17:18

Sauf si le serveur Web (php) se trouve à Taïwan, le serveur Mysql à Malibu et l'entreprise concernée à Kinshasa! là il faut cogiter :lol:
Y a pas moyen de régler le fuseau horaire ?