我正在开发一个票务系统,将根据特定条件为分析师分配票证。
当他们第一次登录时,他们将单击“获取网络票证”按钮。
门票分配如下:
- 第一个:开放(状态为开放的最旧的票证)
- 第二个:待处理(当待处理日期 = 时,任何处于待处理状态的工单 今天)
- 第三:就绪(最旧的、新的(未分配)票证)
因此,如果他们单击“获取下一个”,它将查找最旧的打开状态(如果没有)> 选择“今天待处理”(如果没有)> 选择最旧的“就绪”。
下面是我的查询,但它似乎运行不可靠。有什么建议吗?
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
最佳答案
这将按 support_case 对它们进行排序,然后按最旧的打开方式排序。
Open 将按照最旧 -> 最新的顺序排序,然后按 Pending 排序,最旧 -> 最新,然后按 Ready 排序,最旧 -> 最新。
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 的评论,了解无需更改列结构即可实现相同功能的另一个选项。
关于mysql根据票证状态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001162/