2010-12-11 33 views
8

J'ai une table avec 2 champs DATE et IMPORTANCE. Maintenant, je veux trier ces deux champs dans DESCENDING ORDER de sorte que les lignes sont classées par IMPORTANCE pour CHAQUE DATE. Par exemple, si tri correct, les lignes doivent revenir comme ceci:Trier plusieurs champs dans MySQL

Dec 3, 2010 - 10 
Dec 3, 2010 - 10 
Dec 3, 2010 - 8 
Dec 3, 2010 - 7 
Dec 3, 2010 - 3 
Dec 3, 2010 - 1 

Dec 2, 2010 - 10 
Dec 2, 2010 - 9 
Dec 2, 2010 - 3 

Dec 1, 2010 - 8 
Dec 1, 2010 - 5 
Dec 1, 2010 - 5 
Dec 1, 2010 - 4 

est-il un moyen efficace d'y parvenir avec une seule instruction de requête?

Répondre

25
SELECT * FROM yourtable 
ORDER BY `DATE` DESC, `IMPORTANCE` DESC 
+5

@Frank, DATE est un mot-clé, et dans certains cas, si vous nommez une colonne avec des mots spéciaux, vos requêtes pourraient avoir des erreurs. '\' 'l'échappe. –

+3

Non, DATE n'est pas un mot clé et 'ne fait pas partie des normes SQL ANSI. Utilisez des guillemets doubles "pour échapper les noms d'objet, MySQL sait aussi à propos des guillemets doubles, il s'appelle ANSI_QUOTES.Vérifiez http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html et http: // dev. mysql.com/doc/refman/5.5/fr/server-sql-mode.html#sqlmode_ansi_quotes –

+1

ANSI_QUOTES n'est pas le comportement standard de Mysql et permet de modifier la syntaxe nécessaire pour délimiter les chaînes littérales, donc très probablement casser une grande partie du logiciel Développé pour Mysql – tacone

5

En fait, vous pouvez simplement ajouter autant de champs à ORDER BY que vous le souhaitez.

Ce serait quelque chose comme:

SELECT * FROM table ORDER BY date DESC, importance DESC