我正在开发一个票务系统,根据特定标准为分析师分配票据。
首次登录时,他们会点击Get Net Ticket按钮。
门票分配如下:
因此,如果他们单击“获取下一个”,它将查找最旧的打开,如果没有>今天选择等待,如果没有>选择最旧的Ready。
以下是我的查询,但似乎无法正常工作。有什么建议吗?
SELECT *
FROM support_case
WHERE (
case_status = 'Pending'
AND case_queue = 'Software'
AND pendDate = '12/15/2011')
OR (
case_status = 'Open'
AND case_queue = 'Software')
OR (
case_status = 'Ready'
AND case_queue = 'Software')
ORDER BY lastUpdate ASC
LIMIT 0 , 1
答案 0 :(得分:1)
这将按support_case对它们进行排序,然后按最早的打开方式对它们进行排序。
打开将被排序为最旧 - >最新,然后是待排序的最旧 - >最新,然后就绪排序最旧 - >最新。
SELECT *
FROM support_case
WHERE (
case_status = 'Pending'
OR case_status = 'Open'
OR case_status = 'Ready' )
AND case_queue = 'Software'
ORDER BY support_case ASC, lastUpdate ASC
LIMIT 1
如果您有不同的状态值(不是很好的字母顺序),您可以重新构建数据库,或添加新列,为您的case_status提供数值。然后,您可以在查询中添加ORDER BY case_status_value DESC
。
所以: '开放'= 10 '待定'= 5 '准备'= 1
首先返回Open,然后挂起,然后准备好。然后你可以查询:
SELECT *
FROM support_case
WHERE (
case_status = 'Pending'
OR case_status = 'Open'
OR case_status = 'Ready' )
AND case_queue = 'Software'
ORDER BY case_status_value DESC,
lastUpdate ASC
LIMIT 1
请参阅下面@ konerak的评论,了解另一个完成相同操作的选项,而不会更改列结构。