X

MySQL ENUM ORDER BY

Редко использую 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"
я, пока что, не нашел

Категории: MySQL Базы данных
Тэги: sort

Комментарии (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')