Trier plusieurs fois les enregistrement avec ou sans DESC

Mammouth du PHP | 693 Messages

02 mars 2007, 13:34

Bonjour

POur faire un tri sur plusieursenregistrement, on ajoute les critère à la suite de ORDER BY.

Pour faire un trie par ordre décroissant, on utilise DESC.

Quel est la syntaxe pour trier par ordre décroissant suivant une colonne puis par ordre croissant suivant une autre colonne ?

Une autre question, pouvont nous faire un tri personnalisé, en indiquant l'ordre des différente entrée. Par exemple, une colonne contient a, b et c et je veux que la table sois trier avec d'abord b puis a puis c

Eléphant du PHP | 377 Messages

02 mars 2007, 13:58

y'à qu'à demanderà MySQL, il est très discipliné ;)

Code : Tout sélectionner

... ORDER BY B DESC, a ASC, c DESC
Petit scarabée deviendra grand

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 mars 2007, 14:01

1ere question :
Il est possible de donner l'attribut ASC ou DESC à chaque colonne.
Ainsi, si tu veux trier par la colonne a, croissant et b, décroissant, tu écris

Code : Tout sélectionner

ORDER BY a ASC, b DESC
Comme l'attribut ASC est facultatif et représente le choix par défaut, tu peut simplifier par

Code : Tout sélectionner

ORDER BY a, b DESC
2eme question :
L'ordre de tri se fait selon l'ordre des champs dans le order by.
Ainsi, si tu veux trier selon la colonne b, a et c (si la valeur du champ b est identique pour 2 enregistrements, le tri se fait sur la valeur du champ a puis du champ c), tu écris :

Code : Tout sélectionner

ORDER BY b, a, c
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

Mammouth du PHP | 693 Messages

02 mars 2007, 14:46

Merci pour la reponse à la deuxième question

La deuxième question a été mal comprise (faut dire que je suis pas claire :P )

Dans une colonne, les valeurs sont a, b et c.

J'aimerai que les ligne avec b soient avant les ligne avec a, elles même avant les lignes avec c.

Bref, faire une fonction personnelle de tri.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

02 mars 2007, 20:32

Donc cette colonne ne peut prendre que 3 valeurs différentes "a", "b" ou "c" ? MySQL a une fonction FIELD() qui sert à faire ça. Pour les autres SGBD il faudra faire preuve de créativité.

Code : Tout sélectionner

SELECT * FROM table ORDER BY FIELD(champ, 'b', 'a', 'c')

Code : Tout sélectionner

SELECT *, CASE champ WHEN 'b' THEN 0 WHEN 'a' THEN 1 ELSE 2 END AS ordre ORDER BY ordre

Mammouth du PHP | 693 Messages

02 mars 2007, 22:27

OK, merci beaucoup.

Par chance j'utilise MySQL :D