我有以下情况:
整个表格应按虚构的优先级排序,这意味着:
open
和customerResponded
具有相同的优先级,因此这些项目按最新票证消息ASC的日期时间排序(应首先处理最长的未更改票证,因此在列表顶部)。< / LI>
waitingForCustomer
的优先级较低。因此,waitingForCustomer
的票证总是落后于状态为open
或customerResponded
的票证,并且这些票据按日期时间DESC排序(因为客户从未回复的旧票证不太相关)。< / LI>
closed
与waitingForCustomer
的工作方式相同,但优先级更低,因此这些故障单位于列表末尾。所以,在我解释了这个场景后,我有以下问题:
是否可以为ORDER BY添加条件以使其成为可能,或者是否有其他方法可以实现?
编辑: 故障单状态是一个整数(open = 0,customerResponded = 10,waitingForCustomer = 20,closed = 100)。
答案 0 :(得分:3)
您可以通过以下方式在订单中使用案例表达式:
ORDER BY status,
CASE WHEN status IN (0, 10) THEN Datetime END ASC,
CASE WHEN status IN (20, 100) THEN Datetime END DESC
答案 1 :(得分:0)
感谢GarethD,我找到了一个解决方案,但与他有点不同:
ORDER BY
CASE WHEN t.`ticket_status` IN (0, 10) THEN 0 ELSE t.`ticket_status` END ASC,
CASE WHEN t.`ticket_status` IN (0, 10) THEN m.`message_created`
ELSE -m.`message_created` END ASC
首先,我检查一下我的状态是open=0
还是customerResponded=10
。
如果是这样,我按0排序(这意味着同样位于列表顶部)。
否则,我按故障单状态排序(waitingForCustomer
的优先级高于closed
)。
从属订单指令现在按message_created ASC
或-message_created ASC
(技术上为message_created DESC
)订购,以便在下属“组”中按日期排序。