2011-11-03 83 views
0

我正在制定票務系統,根據特定條件爲分析師分配票證。基於票據狀態的mysql查詢

當他們第一次登錄時,他們將點擊Get Net Ticket按鈕。

門票分配如下:

  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 
+0

「不可靠」是什麼意思?該查詢不符合您的「第一二三」業務規則?它應該如何與'ORDER BY lastUpdate ASC'一起使用? – Konerak

回答

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

這樣打開,首先返回,然後掛起,然後準備。然後你就可以查詢:

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的評論下面爲完成同樣的,無柱結構發生變化的另一種選擇。

+1

添加一個值可能會起作用。但在這裏,你也可以訂購'case_status',因爲在這個特定的情況下,它看起來所需的順序等於字母順序:) – Konerak

+0

@Konerak尼斯,我想我需要學習我的字母表...在這裏,我認爲待定打算讓它循環;) –

+1

隨意將其添加到您的答案中 - 而您的「添加價值解決方案」將是更通用的情況。還有一個捷徑:不是添加一列,而是添加一列,只需'按順序排列案例case_status'打開'然後3當'待定'時2然後'準備好然後1'時。保存添加列,但將邏輯移至查詢。每種方法都有優勢。 – Konerak