2009-07-05 85 views
3

我有3場 「任務」 表:MySQL中的條件排序?

  1. 日期
  2. 優先級(0,1,2)
  3. 完成(0,1)

什麼我想實現與整個表按完成標誌排序,未完成的任務應按優先級排序,而完成的任務應按日期排序:

  1. 從任務順序選擇*由ASC
  2. 做過如果按優先級遞減
  3. 做= 0額外訂單,如果按日期倒序

做= 1只還爲了是否有可能做到這一點在MySQL沒有工會?

謝謝。

回答

12

你可以嘗試ORDER BY (done asc, aux desc)其中輔助計算與CASE,以基於對done值或者優先級或日期(您可能需要將它們轉換成同一類型,以適應在同一個表達式,如施放日期一個合適的整數天數)。

例如:

SELECT * FROM tab 
ORDER BY done desc, 
     case done 
      when 0 then prio 
      else to_days(thedate) 
     end desc; 
+0

謝謝,這工作(即使沒有TO_DAYS) – serg 2009-07-05 16:53:53

7

從亞歷克斯·馬爾泰利兩者只是縮短一點與IF()和固定的ASC/DESC訂購

SELECT * FROM tab 
ORDER BY done ASC, IF(done, to_days(thedate), prio) DESC;