Suche…


Kontexte

Die Klauseln in einem SELECT haben eine bestimmte Reihenfolge:

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

Basic

BESTELLEN DURCH x

x kann ein beliebiger Datentyp sein.

  • NULLs gehen vor NULLs vor.
  • Der Standardwert ist ASC (niedrigste bis höchste)
  • Zeichenfolgen ( VARCHAR usw.) werden gemäß der COLLATION der Deklaration COLLATION
  • ENUMs werden nach der Deklarationsreihenfolge ihrer Zeichenfolgen geordnet.

Aufsteigend absteigend

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 sogar bei DESC erster Stelle.
  • In den obigen Beispielen können INDEX(x) , INDEX(lastname, firstname) , INDEX(submit_date) die Leistung erheblich verbessern.

Aber ... Beim Mischen von ASC und DESC , wie im letzten Beispiel, kann kein zusammengesetzter Index verwendet werden. INDEX(submit_date DESC, id ASC) hilft auch nicht - " DESC " wird in der INDEX Deklaration syntaktisch erkannt, aber ignoriert.

Einige Tricks

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.

Kundenspezifische Bestellung

SELECT * FROM some_table WHERE id IN (118, 17, 113, 23, 72) 
ORDER BY FIELD(id, 118, 17, 113, 23, 72);

Gibt das Ergebnis in der angegebenen Reihenfolge der IDs zurück.

Ich würde ...
118 ...
17 ...
113 ...
23 ...
72 ...

Nützlich, wenn die IDs bereits sortiert sind und Sie nur die Zeilen abrufen müssen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow