Поиск…


Контексты

Предложения в SELECT имеют определенный порядок:

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

основной

ЗАКАЗ BY x

x может быть любым типом данных.

  • NULLs предшествуют не-NULL.
  • По умолчанию используется ASC (от самого низкого до самого высокого)
  • Строки ( VARCHAR и т. Д.) Заказываются в соответствии с COLLATION декларации
  • ENUMs упорядочиваются по порядку его строк.

По возрастанию, по убыванию

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 первом месте даже для DESC .
  • В приведенных выше примерах INDEX(x) , INDEX(lastname, firstname) , INDEX(submit_date) могут значительно повысить производительность.

Но ... Смешивание ASC и DESC , как в последнем примере, не может использовать составной индекс. Также не поможет INDEX(submit_date DESC, id ASC) - « DESC » распознается синтаксически в объявлении INDEX , но игнорируется.

Некоторые трюки

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.

Пользовательский заказ

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

Возвращает результат в указанном порядке идентификаторов.

Я бы ...
118 ...
17 ...
113 ...
23 ...
72 ...

Полезно, если идентификаторы уже отсортированы, и вам просто нужно получить строки.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow