2013-03-27 64 views
1

我正在製作一個任務管理工具。任務的截止日期作爲時間戳存儲在名爲dueTime的MySQL列中,其類型爲INT。如果任務沒有到期日(許多不到期),則dueTime列的值爲0.這些任務需要按照升序 dueTime的順序顯示,沒有到期時間的任務將顯示在名單。按升序排序MySQL查詢除了0

我目前的解決方案是SELECT * FROM tasks WHERE dueTime > 0 ORDER BY dueTime,抓取數據,然後運行第二個查詢SELECT * FROM tasks WHERE dueTime = 0,然後添加該數據。它工作正常,但我想用一個查詢來完成此操作。我也寧願不必添加「有適當的時間」的屬性,因爲這似乎是不必要的。

我見過的其他問題都涉及到使用GROUP BY,但我不確定如果在時間戳上使用它,將是必要的或有效的。

在此先感謝您的幫助!

+0

你可以把CASE語句的ORDER BY子句。 – Randy 2013-03-27 21:41:36

+2

如果您執行'ORDER BY dueTime = 0,dueTime',那麼dueTime = 0的行將排序在其他行之後。 – 2013-03-27 21:54:44

回答

0

你可以試試這個:

SELECT * FROM tasks ORDER BY dueDate IS NULL,dueTime 
0

我認爲至少有3種可能性:

  • 不要使用0作爲「無適當的時候」,但99999,所以你可以保持你的自然「ORDER BY duetime參數ASC」。 (這是不是很乾淨......)

  • 使用兩個查詢,你已經提到,與UNION

  • 使用CASE在您的訂單將它們組合起來BY子句,蘭迪已經提到。另請參見這裏:mysql custom sort