【问题标题】:Order By priority not alphabetically按优先级排序,不按字母顺序
【发布时间】:2013-04-04 20:02:39
【问题描述】:

我正在尝试通过ticket_priority_id 确定我的查询的优先级。

ID 分为ASAPHIGHMEDLOW

当我按ticket_priority_id 订购时,它总是按字母顺序排列(LOWMED 之前)。

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

【问题讨论】:

  • 参见 FIELD()。它会做你需要的。

标签: mysql sql-order-by


【解决方案1】:

您可以像这样在订单中使用 case 语句

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

【讨论】:

  • ELSE 0 会更准确,不是吗?因为没有优先级意味着更低。至少对我来说。
  • @cheesemacfly - 这取决于上下文但是是的,它可能是。
  • 哦,我错了,我的意思是另一种方式,就像你的回答一样:)
  • @cheesemacfly - 看起来你更改了我回复的评论,使我的评论无效。作为记录(正如你所想):对于“空闲”优先级,else 语句应该> 4。 0 表示“尽快超级骗子”优先级。
【解决方案2】:

你可以使用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')

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

【讨论】:

  • 很好,这对我来说是新的。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 2014-06-14
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多