ORDER BY-Сортировка в MySQL

 Список методов сортировки в таблице MySQL с директивой ORDER_BY

  1. Направление сортировки
  2. Сортировка по нескольким столбцам
  3. Сортировка по определенной последовательности
  4. Сортировка по цене, но исключая нулевые значения
  5. Сортировка по данным из другой таблицы
  6. Сортировка в случайном порядке
  7. Сортировка по дате
  8. Проблемы при сортировке с разными тапами данных
  9. Сортировка по количеству символов

 Одной из важнейших садач при  запросе к базе данных MySql на выборку данных является правильная сортировка. Для этого в языке запросов SQL существует оператор ORDER BY.

SQL
SELECT 
	* 
FROM 
	`table`
ORDER BY 
	`столбец` [ASC | DESC]

Направление сортировки

За направление сортировки отвечают два пост префикса ASC / DESC.

ASC – (по умолчанию, необязательный). Сортирует набор выборки в порядке возрастания или по алфавиту.

DESC – сортирует в порядке убывания.

SQL
//Сортировка порядке возрастания или по алфавиту
SELECT * FROM `table` ORDER BY  `name` ASC

//Сортировка в порядке убывания.
SELECT * FROM `table` ORDER BY  `name` DESC

Сортировка запроса по нескольким столбцам

Можно организовать сортировку по несколькольким столбцам, указывая их через запятую в порядке приоритета.

SQL
SELECT * FROM `table` ORDER BY  `name` DESC, `text` DESC

Сортировка запроса по определенной последовательности

С помощью функции FIELD() можно получить записи из БД в нужной последовательности, например вывести первыми записи с определенными `id`.

SQL
SELECT * FROM `table` ORDER BY  FIELD(`id`, 1,2,3)

Также можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее по алфавиту.

SQL
SELECT * FROM `table` ORDER BY  FIELD(`id`, 1,2,3) DESC, `name`

Сортировка по цене, но исключая нулевые значения

В списках товаров отсортировать значения цен по возрастанию, но при этом нулевые значения были в конце поможет следующий пример.

SQL
SELECT * FROM `table` ORDER BY  IF(`price` > 0, 0, 1), `price`

Сортировка по данным из другой таблицы

К примеру имеется таблица брендов и товаров, нужно отсортировать бренды по количеству товаров.

SQL
SELECT 
	*, 
	(SELECT COUNT(*) FROM `prods` WHERE `brand_id` = `brands`.`id`) AS `prod_count` 
FROM 
	`brands` 
ORDER BY 
	`prod_count` DESC

Сортировка в случайном порядке

Для сортировки записей выбора в случайном порядке применим оператор RAND().

SQL
SELECT 	* FROM 	`table` ORDER BY RAND()

Сортировка по дате

Обычно сортировка по дате выполняется как обычно с применением префиксов ASC или DESC, но если даты записаны в обычном текстовом формате, то их придётся  перевести в тип datetime c помощью функции STR_TO_DATE(), указав нужный формат:

SQL
SELECT
	*, 
	STR_TO_DATE(`date`, '%d.%m.%Y') AS `tmp_date`
FROM 
	`table` 
ORDER BY 
	`tmp_date` DESC

Проблемы при сортировке с разными тапами данных

Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:

SQL
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))

Сортировка по количеству символов

SQL
SELECT * FROM `table` ORDER BY CHAR_LENGTH(`name`) DESC

Источник © https://snipp.ru/mysql/sql-sort

Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика