按优先级排序不按字母顺序排列

时间:2013-04-04 20:02:40

标签: mysql sql-order-by

我正在尝试按ticket_priority_id优先处理我的查询。

这些ID分为ASAPHIGHMEDLOW

当我按ticket_priority_id订购时,它始终按字母顺序排列(LOW位于MED之前)。

我怎样才能做到这一点,我可以按ticket_priority_id订购,但不是按字母顺序排序,而是按重要性排序。我想要订单(从上到下)ASAP - HIGH - MED - LOW

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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')

将没有优先级的行放在底部而不是顶部。