基于票证状态的mysql查询

基于票证状态的mysql查询,mysql,if-statement,Mysql,If Statement,我正在开发一个票务系统,分析员将根据特定的标准分配票务 当他们第一次登录时,他们将单击Get Net Ticket按钮 门票分配如下: 第一:打开(状态为打开的最旧票证) 第二:挂起(挂起日期时具有挂起状态的任何票据)= (今天) 第三张:准备好的(最旧的、新的(未分配的)票) 因此,如果他们单击“获取下一步”,它将查找最旧的打开项,如果没有>选择“今天挂起”,如果没有>选择“最旧的准备就绪” 下面是我的问题,但它似乎工作不可靠。有什么建议吗 SELECT * FROM sup

我正在开发一个票务系统,分析员将根据特定的标准分配票务

当他们第一次登录时,他们将单击Get Net Ticket按钮

门票分配如下:

  • 第一:打开(状态为打开的最旧票证)
  • 第二:挂起(挂起日期时具有挂起状态的任何票据)= (今天)
  • 第三张:准备好的(最旧的、新的(未分配的)票)
  • 因此,如果他们单击“获取下一步”,它将查找最旧的打开项,如果没有>选择“今天挂起”,如果没有>选择“最旧的准备就绪”

    下面是我的问题,但它似乎工作不可靠。有什么建议吗

        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,操作顺序中的第一个是“待定”。如果案件的状态为未决,我们将检查未决日期是否为今天。如果挂起日期是今天,我们转到下一个条件-打开(没有挂起日期-只有状态和队列)。如果没有票是“开放的”,我们移动到“准备就绪”,等等。