probleme requete sur order by

Invité
Invité n'ayant pas de compte PHPfrance

25 mars 2008, 15:30

Bonjour,

Voila, c'est peux être tout bête mais je pêche la dessus.
Je veux avec ma requête faite afficher dans l'ordre croissant mes enregistrements par rapport au date de programmation, et si celle ci sont égale a 0 que se soit trier par date de résiliation.

Donc moi j'ai mis
order by date_prog, date_resil
mais il m'affiche d'abord les 00-00-0000 puis les dates.
Y aurai-t-il un moyen d'indiquer de classer par ordre de date, pour ceux qui ont une date d'enregistrer ?

merci d'avance

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

25 mars 2008, 18:10

C'est assez logique, si tu classes tes dates par ordre croissant, le 0 vient en premier :)

En général, dans ces cas là, j'utilise un case/when dans le select afin de créer une colonne virtuelle pour le tri :

Code : Tout sélectionner

SELECT ..., CASE date_prog WHEN '0000-00-00' THEN 1 ELSE 0 END AS sort_order FROM ... ORDER BY sort_order, date_prog, date_resil
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

26 mars 2008, 17:38

parfait c'est exactement se qu'il me fallait. Je ne connaissais pas du tout cette technique.
Merci beaucoup

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 mars 2008, 18:49

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer