Сортировка в MySQL

Примеры разных вариантов сортировки в MySQL.

По нескольким колонкам

Перечисляете через запятую столбцы по которым нужно выполнить сортировку и указываете её направление:

SELECT * FROM articles ORDER BY a_title ASC, a_date DESC

Сортировка по списку значений

SELECT * FROM articles ORDER BY FIELD( a_season, 'весна','лето','осень','зима' )

Функция FIELD() ищет значение, указанное в первом параметре, среди значений, перечисленных в остальных параметрах, и возвращает его порядковый номер. При выполнении запроса в первый параметр функции FIELD будут передаваться значения из поля a_season и, таким образом, записи будут отсортированы в заданном порядке.

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

SELECT * FROM metadata ORDER BY ( m_value + 0 )

m_value будет интерпретироваться как число.

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

SELECT left( m_value, 20 ) AS m_value_str FROM articles ORDER BY m_value_str

m_value_str будет интерпретироваться как строка (пусть даже оно было числом). Функция left возвращает строку, содержащую первые N символов из строки. В данном случае будут выбраны первые 20 символов (достаточно чтобы преобразовать целое число в строку).

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

SELECT * FROM articles ORDER BY BINARY a_title

Сортировка по фрагменту строки

SELECT SUBSTRING_INDEX( a_title, ' ', -1 ) AS a_title_part FROM wp_5_posts ORDER BY a_title_part

SUBSTRING_INDEX выбирает подстроку из строки.

Сортировка строк по их длине

SELECT * FROM articles ORDER BY CHAR_LENGTH( a_title )

Сортировка по нескольким полям одно из которых может быть NULL

SELECT * FROM mytable ORDER BY IFNULL( due_date, '9999-12-31 23:59:59' ) ASC, priority DESC

Функция IFNULL() возвращает указанное значение, если выражение равно NULL, в противном случае возвращает выражение.

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

SELECT * FROM mytable ORDER BY
CASE
	WHEN due_date = '0000-00-00' THEN '9999-12-31 23:59:59'
	ELSE due_date
END ASC,
priority DESC

Условие CASE позволяет считать значение колонки due_date равное '9999-12-31 23:59:59', если реальное значение равно '0000-00-00'.
Синтаксис конструкции MySQL CASE выглядит так:

CASE
	WHEN condition1 THEN result1
	WHEN condition2 THEN result2
	WHEN conditionN THEN resultN
	ELSE result
END;