MySQL - заказ чем-то не ASC или DESC - PullRequest
6 голосов
/ 12 мая 2011

Скажем, у меня есть таблица цветов с соответствующими цветами.Можно ли получить список цветов и заказать их, скажем, сначала Yellow, затем Blue, затем Red.По сути, я хочу указать список значений и упорядочить результат по этим значениям.Возможно ли это?

Ответы [ 3 ]

10 голосов
/ 12 мая 2011

Вы можете использовать FIND_IN_SET:

ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red')

.. или оператор ANSI CASE:

ORDER BY CASE column
           WHEN 'Yellow' THEN 1
           WHEN 'Blue' THEN 2
           WHEN 'Red' THEN 3
         END
2 голосов
/ 12 мая 2011

Мой выбор - использование функции FIELD(str, str1, str2, ...).

Возвращает индекс (позицию) строки в str1, str2, str3, ... список. Возвращает 0, если str не найден.

Таким образом, вы можете использовать возвращаемое значение, чтобы упорядочить список результатов:

ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red')

Если вы хотите изменить порядок, просто добавьте DESC.

2 голосов
/ 12 мая 2011

Вы можете добавить поле в таблицу цветов для sort_order и указать значения в соответствии с требованием сортировки. В запросе вы можете использовать ORDER BY sort_order ASC

Я ожидаю, что вы хотите заказать его в соответствии с динамическим требованием, явно не для этих трех упомянутых цветов. Это позволит вам полностью гибко управлять порядком сортировки.

...