MySQL
COMMANDÉ PAR
Recherche…
Les contextes
Les clauses d'un SELECT
ont un ordre spécifique:
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ...
ORDER BY ... -- goes here
LIMIT ... OFFSET ...;
( SELECT ... ) UNION ( SELECT ... ) ORDER BY ... -- for ordering the result of the UNION.
SELECT ... GROUP_CONCAT(DISTINCT x ORDER BY ... SEPARATOR ...) ...
ALTER TABLE ... ORDER BY ... -- probably useful only for MyISAM; not for InnoDB
De base
COMMANDER PAR x
x
peut être n'importe quel type de données.
-
NULLs
précède les non-NULL. - La valeur par défaut est
ASC
(du plus bas au plus élevé) - Les chaînes (
VARCHAR
, etc.) sont classées selon laCOLLATION
de la déclaration -
ENUMs
sont classés par ordre de déclaration de ses chaînes.
Ascendant descendant
ORDER BY x ASC -- same as default
ORDER BY x DESC -- highest to lowest
ORDER BY lastname, firstname -- typical name sorting; using two columns
ORDER BY submit_date DESC -- latest first
ORDER BY submit_date DESC, id ASC -- latest first, but fully specifying order.
-
ASC
=ASCENDING
,DESC
=DESCENDING
-
NULLs
vient en premier, même pourDESC
. - Dans les exemples ci-dessus,
INDEX(x)
,INDEX(lastname, firstname)
,INDEX(submit_date)
peuvent considérablement améliorer les performances.
Mais ... Mélanger ASC
et DESC
, comme dans le dernier exemple, ne peut pas utiliser un index composite pour en bénéficier. INDEX(submit_date DESC, id ASC)
n’aidera pas non plus - " DESC
" est reconnu syntaxiquement dans la déclaration INDEX
, mais est ignoré.
Des astuces
ORDER BY FIND_IN_SET(card_type, "MASTER-CARD,VISA,DISCOVER") -- sort 'MASTER-CARD' first.
ORDER BY x IS NULL, x -- order by `x`, but put `NULLs` last.
Commande personnalisée
SELECT * FROM some_table WHERE id IN (118, 17, 113, 23, 72)
ORDER BY FIELD(id, 118, 17, 113, 23, 72);
Renvoie le résultat dans l'ordre spécifié des identifiants.
id | ... |
---|---|
118 | ... |
17 | ... |
113 | ... |
23 | ... |
72 | ... |
Utile si les identifiants sont déjà triés et que vous avez juste besoin de récupérer les lignes.
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow