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 la COLLATION 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 pour DESC .
  • 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