基于故障单状态的mysql查询

时间:2011-11-03 20:07:06

标签: mysql if-statement

我正在开发一个票务系统,根据特定标准为分析师分配票据。

首次登录时,他们会点击Get Net Ticket按钮。

门票分配如下:

  1. 首先:打开(状态为Open的最旧票证)
  2. 第二名:待定(当挂牌日期=时,任何具有待处理状态的门票 今天)
  3. 第三:准备好(最旧的,新的(未分配)票证)
  4. 因此,如果他们单击“获取下一个”,它将查找最旧的打开,如果没有>今天选择等待,如果没有>选择最旧的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
    

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的评论,了解另一个完成相同操作的选项,而不会更改列结构。