2012-02-14 99 views
2

我想通過時間戳和枚舉(主命令時間戳,「子順序」枚舉)排序順序,但似乎只有一個或另一個工程。通過時間戳和枚舉MySQL的排序順序

這是一個非常簡單的表稱爲table

id | task | date_estimated [timestamp] | status [enum]

我已經試過:

select * from table order by date_estimated DESC, status DESC

其中,應在理論上,給我的東西,是子分類按日期枚舉狀態,對嗎?

 
3/5/2012 
added - gas up 
done - buy milk 
done - buy pencils 

但是,它給我像

 
3/5/2012 
done - buy milk 
added - gas up 
done - buy pencils 

混雜如何編寫一個查詢來有點像第一種情況?

回答

2

嘗試

select * from table order by DATE(date_estimated) DESC, status DESC

時間戳字段包括時/分/秒,那麼你會得到一個奇怪的命令,如果你正在尋找的實際日期部分考慮的情況下將有發生在同一秒內,以便子組在您的查詢中有意義。

+0

Date()正是固定它。現在他們首先按日期排序,然後按枚舉排序!經過一個小時的沮喪之後,這就是解決方案。謝謝! – ina 2012-02-14 21:28:35

+0

很高興幫助。請記住,當使用多個訂單時,您的第一個條件訂單將不得不導致您的結果集中出現多個值,以便第二個訂單通過。 – methodin 2012-02-15 03:01:39

1

檢查該段從MySQL文檔:

ENUM值是根據在其中枚舉 成員在列說明書中列出的順序進行排序。 (換句話說,ENUM 的值根據它們的索引號進行排序)。例如,'a' 在'b'之前爲ENUM('a','b')排序,但'b'在'a'之前排序對於 ENUM('b','a')。空字符串在非空字符串之前排序,並且在所有其他枚舉值之前排序NULL值。要防止 意外的結果,請按字母順序指定ENUM列表。您也可以使用ORDER BY CAST(col AS AS)或ORDER BY CONCAT(col)使 確定該列按字面順序排序,而不是按索引編號排序。

每個枚舉值被映射到一個數字(它的索引號),這就是排序時使用的值。這就是爲什麼它沒有通過結果中的字符串表示進行排序。

http://dev.mysql.com/doc/refman/5.0/en/enum.html

+0

但是,如果它按枚舉整數排序,則「添加」應該與已添加的和已完成的「已完成」一起聚集......相反,它只是兩者的混合。 – ina 2012-02-14 21:26:36

+0

是的,我認爲「完成 - 買牛奶」是一個單一的價值。 – Vache 2012-02-15 01:54:20