基于票证状态的mysql查询
我正在开发一个票务系统,分析员将根据特定的标准分配票务 当他们第一次登录时,他们将单击Get Net Ticket按钮 门票分配如下:基于票证状态的mysql查询,mysql,if-statement,Mysql,If Statement,我正在开发一个票务系统,分析员将根据特定的标准分配票务 当他们第一次登录时,他们将单击Get Net Ticket按钮 门票分配如下: 第一:打开(状态为打开的最旧票证) 第二:挂起(挂起日期时具有挂起状态的任何票据)= (今天) 第三张:准备好的(最旧的、新的(未分配的)票) 因此,如果他们单击“获取下一步”,它将查找最旧的打开项,如果没有>选择“今天挂起”,如果没有>选择“最旧的准备就绪” 下面是我的问题,但它似乎工作不可靠。有什么建议吗 SELECT * FROM sup
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
这将按支持案例对它们进行排序,然后按最旧的打开顺序进行排序 打开的将被排序为最旧->最新,然后是待排序的最旧->最新,然后是准备排序的最旧->最新
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\u状态提供一个数值。然后,您可以在查询中添加一个按案例排序\u status\u value DESC
因此:
“开放”=10
“待定”=5
“就绪”=1
所以先返回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 case_status_value DESC,
lastUpdate ASC
LIMIT 1
请参阅下面@konerak的评论,以了解另一个实现相同功能的选项,而不改变列结构。您认为
不可靠是什么意思?查询不符合您的“第一、第二、第三”业务规则?它应该如何使用lastUpdate ASC下的订单?添加一个值可能会起作用。但在这里,您也可以在case_status
上进行排序,因为在这种特定情况下,所需的顺序似乎等于字母顺序:)@Konerak Nice,我想我需要学习我的字母表。。。在这里,我以为Pending会把它抛出一个循环;)请随意将其添加到您的答案中,您的“增值解决方案”将是更一般的情况。还有一个快捷方式:不必添加列,只需在“打开”时按案例状态排序,然后在“挂起”时按3排序,在“准备就绪”时按2排序,然后按1排序。保存并添加列,但将逻辑移动到查询。每种方法都有优点。我不知道案例逻辑。谢谢感谢您的反馈…唯一缺少的是,如果一个案件是开放的或准备好了,它不会有一个未决日期。ie:如果我们执行get next,操作顺序中的第一个是“待定”。如果案件的状态为未决,我们将检查未决日期是否为今天。如果挂起日期是今天,我们转到下一个条件-打开(没有挂起日期-只有状态和队列)。如果没有票是“开放的”,我们移动到“准备就绪”,等等。