Главная > MySQL | Базы данных > MySQL ENUM ORDER BY

MySQL ENUM ORDER BY

12.02.2012 4 комментария » Просмотры: 1 957

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"
я, пока что, не нашел

Автор: | Рейтинг: 4/5 | Теги:

4 комментария

Написать свой
  1. Vitaliy Orlov Ответить
    18.02.2016 в 8:58 дп
    Для того, чтобы кастомные сортировки были в одном месте, добавляю еще один рецепт:

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

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

Добавить комментарий для Vitaliy Orlov Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>