MySQL ORDER BY [значение настраиваемого поля SET] - PullRequest
2 голосов
/ 26 октября 2010

Я надеюсь, что есть простое решение для этого:

У меня есть таблица, в которой каждая строка имеет свой собственный статус (SET поле типа). Статусы могут быть:

  • 1007 * отсутствует *
  • доступны
  • занято
  • Расстояние

Я хотел бы заказать следующим образом

  • 1019 * доступно *
  • занят
  • расстояние
  • отсутствует

Я думал, что просто

ORDER BY `status` ASC

сделает трюк (в алфавитном порядке), но даст мне следующее:

  • 1034 * отсутствует *
  • доступны
  • занят
  • Расстояние

Как можно разобраться в этом самым простым способом?

Заранее спасибо,

Fabrik

Ответы [ 5 ]

20 голосов
/ 20 ноября 2013
SELECT * FROM table ORDER BY FIELD(status,'offline','available','busy','distance')

см. Заказ Mysql по конкретным значениям идентификатора

9 голосов
/ 26 октября 2010

Вы также можете сделать что-то вроде этого, если изменить порядок значений SET на непрактичный:

... ORDER BY CASE `status` 
                WHEN 'available' THEN 1
                WHEN 'busy' THEN 2
                WHEN 'distance' THEN 3
                WHEN 'offline' THEN 4
             END
6 голосов
/ 27 марта 2012

Думаю, я бы добавил еще один способ упорядочения по значениям настраиваемых полей,

ORDER BY FIND_IN_SET(status, 'available,busy,distance,offline')

(Если в приведенных строках есть кавычка, просто избегайте ее)

0 голосов
/ 01 ноября 2013

Проще, чем решения выше:

ORDER BY CONCAT(status)
0 голосов
/ 26 октября 2010

Nevermind.

Хитрость заключается в сохранении SET значений в правильном порядке.

...