8791 sujets

Développement web côté serveur, CMS

Bonjour,
j'ai un souci de comparaison de date dans une requête SQL.
Le but est de savoir si la date qui est dans la variable "echeance" est infériere ou supérieure à NOW.
Je me suis inspiré de ce message:ICI

J'ai donc fait ceci:

        $c = new Criteria();
        $c->add('echeance', '0000-00-00', '!=');
        $c->add('echeance', 'NOW()', '>=');		
        $c->addOrder("echeance DESC");


Mais je n'ai aucun résultat. Je n'ai pas d'erreur non plus.
Puis-je avoir un coup de pouce pour que ça fonctionne?

Merci!
Modifié par Hexa (07 Feb 2013 - 11:48)
Salut,
si je vire cette ligne, tout les enregistrement de la table sont listés, même ceux dont la date (champs echeance) est par défaut. (0000-00-00)

Merci pour ton aide.
Je ne sais pas ce qu'est "Propel". Là, c'est de la POO ma requête.

Je vais regarder ton lien.

En passant, j'ai essayé de remplacer NOW() par CURDATE() mais sans succès.

Si tu as une autre idée...
Ha ok, mais non, je code à la main.
En fait, je n'ai jamais rien pigé aux framework... Smiley ohwell
Oui, la voici:


SELECT SQL_CALC_FOUND_ROWS * FROM ma_table WHERE echeance != '0000-00-00' AND echeance <= 'CURDATE()' ORDER BY echeance ASC LIMIT 20


Comme tu le vois, j'ai essayé avec CURDATE() mais c'est pas mieux.

Je continu à chercher sur le web mais c'est allucinant les réponses contradictoires que je trouve. Certains font même des usines à gaz pour comparer deux dates.
Plus je cherche, moins je comprend, plus je suis perdu!

jb_gfx --> au secours!
Modifié par Hexa (07 Feb 2013 - 13:59)
Hé oui, j'y ai pensé à ça!
J'ai même essayé de faire une concaténation mais là, j'ai une belle erreur:


Call to undefined function CURDATE()


Avec NOW() c'est pareil!
Oui, ou intercepter la date après la requête, puis la comparer comme je veux.

Là encore je trouve quantité de réponses sur le web dont la plupart contradictoires...

Je ne désarme pas!

Si tu as encore des idées...
Bon, je me suis penché encore dans le manuel php et j'ai trouvé une solution qui fonctionne parfaitement.


        $c = new Criteria();
        $c->add('echeance', '0000-00-00', '!=');
        $c->add('echeance', date('Y-m-d'), '<=');		
	$c->addOrder("echeance ASC");


Est-ce propre comme code?
Oups, je suis désolé!
De toutes façons, tu m'as aidé à réfléchir et à comprendre.

Je ne peux pas utiliser "datetime" car mon champs sql est "date" tout court! Je n'ai pas besoin de l'heure.

Merci également pour ta réactivité et surtout ce que j'apprécie, c'est que tu écrives en Français, pas en sms à la con.

Cordialement
En fait tu peux générer n'importe format de date avec l'objet dateTime.

Pour ton exemple ça serait :


$dt = new dateTime('now');
$date = $dt->format('Y-m-d');

echo $date;


L'avantage est que dateTime gère correctement les fuseaux horaires et permet plein de trucs par rapport à date() (conversions, comparaisons, etc). La fonction date() est ancienne et limitée, il vaut mieux éviter de l'utiliser pour les nouveaux projets.
Modifié par jb_gfx (07 Feb 2013 - 18:27)
Impec!
Je viens de modifier mon code avec ta suggestion et ça fonctionne très bien.
Par contre, j'ai choisi le format "date" dans le champs "echeance" de ma table pour n'avoir que YYYY-MM-DD, le reste ne me sert à rien.
J'ai bien choisi?