Сортировка в 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;