Page 1 sur 1

Trier plusieurs fois les enregistrement avec ou sans DESC

Posté : 02 mars 2007, 13:34
par orgerix
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

Posté : 02 mars 2007, 13:58
par Shrell
y'à qu'à demanderà MySQL, il est très discipliné ;)

Code : Tout sélectionner

... ORDER BY B DESC, a ASC, c DESC

Posté : 02 mars 2007, 14:01
par zeus
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

Posté : 02 mars 2007, 14:46
par orgerix
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.

Posté : 02 mars 2007, 20:32
par Hubert Roksor
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

Posté : 02 mars 2007, 22:27
par orgerix
OK, merci beaucoup.

Par chance j'utilise MySQL :D