ORDER BY-Сортировка в MySQL
Список методов сортировки в таблице MySQL с директивой ORDER_BY
- Направление сортировки
- Сортировка по нескольким столбцам
- Сортировка по определенной последовательности
- Сортировка по цене, но исключая нулевые значения
- Сортировка по данным из другой таблицы
- Сортировка в случайном порядке
- Сортировка по дате
- Проблемы при сортировке с разными тапами данных
- Сортировка по количеству символов
Одной из важнейших садач при запросе к базе данных MySql на выборку данных является правильная сортировка. Для этого в языке запросов SQL существует оператор ORDER BY.
SELECT * FROM `table` ORDER BY `столбец` [ASC | DESC]
Направление сортировки
За направление сортировки отвечают два пост префикса ASC / DESC.
ASC – (по умолчанию, необязательный). Сортирует набор выборки в порядке возрастания или по алфавиту.
DESC – сортирует в порядке убывания.
//Сортировка порядке возрастания или по алфавиту SELECT * FROM `table` ORDER BY `name` ASC //Сортировка в порядке убывания. SELECT * FROM `table` ORDER BY `name` DESC
Сортировка запроса по нескольким столбцам
Можно организовать сортировку по несколькольким столбцам, указывая их через запятую в порядке приоритета.
SELECT * FROM `table` ORDER BY `name` DESC, `text` DESC
Сортировка запроса по определенной последовательности
С помощью функции FIELD() можно получить записи из БД в нужной последовательности, например вывести первыми записи с определенными `id`.
SELECT * FROM `table` ORDER BY FIELD(`id`, 1,2,3)
Также можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее по алфавиту.
SELECT * FROM `table` ORDER BY FIELD(`id`, 1,2,3) DESC, `name`
Сортировка по цене, но исключая нулевые значения
В списках товаров отсортировать значения цен по возрастанию, но при этом нулевые значения были в конце поможет следующий пример.
SELECT * FROM `table` ORDER BY IF(`price` > 0, 0, 1), `price`
Сортировка по данным из другой таблицы
К примеру имеется таблица брендов и товаров, нужно отсортировать бренды по количеству товаров.
SELECT *, (SELECT COUNT(*) FROM `prods` WHERE `brand_id` = `brands`.`id`) AS `prod_count` FROM `brands` ORDER BY `prod_count` DESC
Сортировка в случайном порядке
SELECT * FROM `table` ORDER BY RAND()
Сортировка по дате
Обычно сортировка по дате выполняется как обычно с применением префиксов ASC или DESC, но если даты записаны в обычном текстовом формате, то их придётся перевести в тип datetime c помощью функции STR_TO_DATE(), указав нужный формат:
SELECT *, STR_TO_DATE(`date`, '%d.%m.%Y') AS `tmp_date` FROM `table` ORDER BY `tmp_date` DESC
Проблемы при сортировке с разными тапами данных
Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:
SELECT *, CAST(`name` AS SIGNED) AS `name_tmp` FROM `table` ORDER BY `name_tmp` //или так SELECT * FROM `table` ORDER BY CAST(`name` AS SIGNED) //Для чисел с плавающей точкой: SELECT * FROM `table` ORDER BY CAST(`name` AS DECIMAL(11,2))
Сортировка по количеству символов
SELECT * FROM `table` ORDER BY CHAR_LENGTH(`name`) DESC
Источник © https://snipp.ru/mysql/sql-sort