2013-04-04 5 views
4

Я пытаюсь расставить приоритеты по моему запросу ticket_priority_id.Сортировать по приоритету не в алфавитном порядке

Идентификаторы классифицируются как ASAP, HIGH, MED, LOW.

Когда я заказываю ticket_priority_id, он всегда помещает его в алфавитном порядке (LOW опережает MED).

Как это сделать, поэтому я могу заказать ticket_priority_id, но не в алфавитном порядке, но по важности. Я хочу, чтобы идти (сверху вниз) ASAP - HIGH - MED - LOW

+1

Просмотреть FIELD(). Он будет делать то, что вам нужно. – Strawberry

ответ

8

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

ORDER BY 
    CASE WHEN ticket_priority_id = 'ASAP' THEN 1 
     WHEN ticket_priority_id = 'HIGH' THEN 2 
     WHEN ticket_priority_id = 'MED' THEN 3 
     WHEN ticket_priority_id = 'LOW' THEN 4 
     ELSE 5 
    END 
+0

'ELSE 0' было бы точнее нет? Поскольку ни один приоритет не будет означать меньше. По крайней мере, для меня. – cheesemacfly

+0

@cheesemacfly - Это зависит от контекста, но да, это может быть. –

+0

О, я так ошибаюсь. Я имел в виду другой путь, так как в вашем ответе :) – cheesemacfly

5

Вы можете использовать FIELD функцию:

ORDER BY 
    FIELD(ticket_priority_id, 'ASAP', 'HIGH', 'MED', 'LOW') 

Обратите внимание, что если ticket_priority_id нет в следующем списке, он вернет 0, поэтому вы можете добавить также и сюда:

ORDER BY 
    ticket_priority_id NOT IN ('ASAP', 'HIGH', 'MED', 'LOW'), 
    FIELD(ticket_priority_id, 'ASAP', 'HIGH', 'MED', 'LOW') 

положить строки, которые не имеют приоритета внизу, а не сверху.

+0

Уход, это ново для меня. +1 –

Смежные вопросы