В статье приводятся примеры по различным сортировкам в MySQL. Для сортировки записей используется оператор ORDER BY.
Перед тем как начать просматривать примеры по использованию сортировки, желательно просмотрите пример ниже, в котором показывается использование синтаксиса оператора ORDER BY.
В примере идет обращение к таблице table и сортировка выполняется по столбцу column, после выполнения SQL запроса отобразятся все строки с таблицы table с примененной сортировкой по столбцу column, строки будут отсортированы в возрастающем порядке, либо по алфавиту. Чтобы сделать сортировку наоборот, требуется указать вместо ASC - DESC.
SELECT * FROM `table`
ORDER BY `column` ASC
Сортировка по цене, но исключая нулевые значения
На практике часто необходимо выполнять сортировку по стоимости, но и при этом необходимо, чтобы сущности с нулевым остатком находились в конце, решение данной задачи находится в следующем примере.
SELECT * FROM `table`
ORDER BY IF(`price` > 0, 0, 1), `price`
Сортировка по данным из другой таблицы
В следующем примере есть таблица складов и товаров, и все это необходимо отсортировать, а именно склады по количеству товаров.
SELECT *, (SELECT COUNT(*)
FROM `prods`
WHERE `sclad_id` = `sclad`.`id`)
AS `prod_count`
FROM `sclad`
ORDER BY `prod_count` DESC
Сортировка по количеству символов
SELECT * FROM `table`
ORDER BY CHAR_LENGTH(`name`) DESC
Сортировка по дате
Иногда возникает проблема, а именно при выполнении подобной сортировки. Проблема возникает из-за того, что даты почему-то хранят в текстовом виде и в результате в итоговой сортировке будут перепутаны месяцы. Решение данной проблемы, это перевод данного поля в тип datetime.
SELECT *,
STR_TO_DATE(`date`, '%d.%m.%Y')
AS `tmp_date`
FROM `table`
ORDER BY `tmp_date` DESC
Сортировка по определенной последовательности
Благодаря функции FIELD() можно получить записи из базы данных в нужной нам последовательности. В примере показывается как вывести вначале записи с определенным ID.
SELECT * FROM `table`
ORDER BY FIELD(`id`, 1,2,3)
Ещё можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее к примеру по алфавиту.
SELECT * FROM `table`
ORDER BY FIELD(`id`, 1,2,3)
ASC, `name`
Сортировка в случайном порядке
SELECT * FROM `table`
ORDER BY RAND()