Редко использую ENUM поля в MySQL, но понадобилось мне сделать сортировку по этому полю. А как же сортируются такие поля по ORDER BY? Все просто, поля сортируются в порядке их добавления в БД.
Т.е. если есть список значений `field` = A, Z, D, E
То ORDER BY `field` даст список A, Z, D, E
А ORDER BY `field` DESC даст список E, D, Z, A
Сортировки по алфавиту не будет! Потому что сортировка идет по индексу ENUM.
Отсортировать по алфавиту, можно так: ORDER BY CAST(`field` AS CHAR)
Как указать свой порядок значений, что-то вроде:
ORDER BY `field` WITH_SORT_ORDER "New York", "Copenhagen", "London"
я, пока что, не нашел
Комментарии (4)
Для того, чтобы кастомные сортировки были в одном месте, добавляю еще один рецепт:
SELECT * FROM `projects`
ORDER BY
CASE `status`
WHEN "on" THEN 0
WHEN "stop" THEN 1
WHEN "off" THEN 2
END
Не уверен, что автору блога ещё актуально, но возможно кто-то другой найдет эту заметку при поиске, как это случилось со мной. Но я решение смог найти:
SELECT * FROM table_name
ORDER BY FIELD (field_name, 'error', 'wait', 'process', 'ok')
либо
SELECT * FROM table_name
ORDER BY FIND_IN_SET (field_name, 'error,wait,process,ok')
Спасибо!
Спасибо большое. Я один из тех, кто искал