mysql根据票证状态查询

标签 mysql if-statement

我正在开发一个票务系统,将根据特定条件为分析师分配票证。

当他们第一次登录时,他们将单击“获取网络票证”按钮。

门票分配如下:

  1. 第一个:开放(状态为开放的最旧的票证)
  2. 第二个:待处理(当​​待处理日期 = 时,任何处于待处理状态的工单 今天)
  3. 第三:就绪(最旧的、新的(未分配)票证)

因此,如果他们单击“获取下一个”,它将查找最旧的打开状态(如果没有)> 选择“今天待处理”(如果没有)> 选择最旧的“就绪”。

下面是我的查询,但它似乎运行不可靠。有什么建议吗?

    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/

相关文章:

mysql 数据库 innodb myisam 性能

javascript - 获取ajax调用的php返回值

if-statement - PL/SQL 中 case 语句和 if elseif 等哪个更有效

java - Android:如何获取翻转器内布局的ID?

mysql - 我可以在 MySQL 下直接在 SQL 中运行 HTTP GET 吗?

sql - 在 order by 子句中使用 bool 表达式

mysql - 自动更新关系表中的键

xcode - Swift 中的 If else 语句

使用 CoffeeScript 语法的 JavaScript - if 条件 : optimize if statement structure

c# - Tic Tac Toe 回合问题 C#