В этой статье приведены примеры использования оператора ORDER BY
для сортировки записей в MySQL.
Синтаксис оператора ORDER BY:
ASC
– (по умолчанию, необязательный). Сортирует набор в порядке возрастания или по алфавиту.
DESC
– сортирует в порядке убывания.
Также возможно сделать сортировку по несколькольким столбцам, указывая их через запятую в порядке приоритета.
С помощью функции FIELD()
можно получить записи из БД в нужной последовательности, например вывести первыми записи с определенными `id`
.
Также можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее по алфавиту.
Или убрать в конец ненужные записи:
В списках товаров отсортировать значения цен по возрастанию, но при этом нулевые значения были в конце поможет следующий пример.
К примеру имеется таблица брендов и товаров, нужно отсортировать бренды по количеству товаров.
SELECT
*,
(SELECT COUNT(*) FROM `prods` WHERE `brand_id` = `brands`.`id`) AS `prod_count`
FROM
`brands`
ORDER BY
`prod_count` DESC
Проблема возникает если даты хранятся в текстовом виде (например 23.09.2020). Если отсортировать таблицу по такому полю, то результате будут перепутаны месяцы.
Текстовую дату нужно перевести в тип datetime c помощью функции STR_TO_DATE()
, указав нужный формат:
Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:
или
Для чисел с плавающей точкой: