Main > Databases | MySQL > MySQL ENUM ORDER BY

MySQL ENUM ORDER BY

12.02.2012 4 comments » Views: 1,960

mysql

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

Author: | Rating: 4/5 | Tags:

4 comments.

Write a comment
  1. Vitaliy Orlov Reply
    18.02.2016 в 8:58 am
    Для того, чтобы кастомные сортировки были в одном месте, добавляю еще один рецепт:

    SELECT * FROM `projects`
    ORDER BY
    CASE `status`
    WHEN "on" THEN 0
    WHEN "stop" THEN 1
    WHEN "off" THEN 2
    END
  2. Givi Reply
    14.02.2014 в 3:13 am
    Не уверен, что автору блога ещё актуально, но возможно кто-то другой найдет эту заметку при поиске, как это случилось со мной. Но я решение смог найти:

    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')
    • Vitaliy Orlov Reply
      14.02.2014 в 6:05 am
      Спасибо!
      • Андрей Reply
        18.10.2016 в 8:52 am
        Спасибо большое. Я один из тех, кто искал

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>