Szukaj…


Konteksty

Klauzule w SELECT mają określoną kolejność:

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

Podstawowy

ORDER BY x

x może być dowolnym typem danych.

  • NULLs poprzedzają NULLs inne niż NULL.
  • Wartość domyślna to ASC (od najniższej do najwyższej)
  • Ciągi VARCHAR ( VARCHAR itp.) Są uporządkowane zgodnie z COLLATION deklaracji
  • ENUMs są uporządkowane według kolejności deklaracji ciągów.

Rosnąco / malejąco

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 są na pierwszym miejscu nawet dla DESC .
  • W powyższych przykładach INDEX(x) , INDEX(lastname, firstname) , INDEX(submit_date) może znacznie poprawić wydajność.

Ale ... Mieszanie ASC i DESC , tak jak w poprzednim przykładzie, nie może skorzystać z indeksu złożonego, aby skorzystać. Również INDEX(submit_date DESC, id ASC) pomoże - „ DESC ” jest rozpoznawany składniowo w deklaracji INDEX , ale jest ignorowany.

Kilka sztuczek

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.

Niestandardowe zamówienie

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

Zwraca wynik w określonej kolejności identyfikatorów.

ID ...
118 ...
17 ...
113 ...
23 ...
72 ...

Przydatne, jeśli identyfikatory są już posortowane i wystarczy pobrać wiersze.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow