2011-02-23 167 views
-1

我想按降序排序日期時間字段。它按天排序就好了。但是,時間部分是隨機的。它完全按升序排序。
樣品查詢:
SELECT * FROM pcvisit WHERE page_id='0005e1ca1784383bf6bf032f33dc6e27' ORDER BY dtime DESC
結果:mysql不正確反向排序日期時間字段

 
4adbc6b1cab4f14e7c9f2e308eb0944e | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-23 16:08:35 | 1 
733ab6507fbdab0e71f357f2f0ff6067 | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-23 07:24:12 | 1 
a5f9c9810e9648d2dbe4dec0e785216c | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-23 05:26:59 | 1 
981e24b4dd257f44a7a41dbdfe4def54 | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-22 09:07:12 | 3 
67906b350d59e97d7f56b7ceb254857e | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-22 06:55:44 | 1 

我也曾嘗試:
SELECT * FROM pcvisit WHERE page_id='0005e1ca1784383bf6bf032f33dc6e27' ORDER BY dtime DESC, TIME(dtime) DESC
盡我所能沒有把它拆分成2個字段。

+4

看起來時間正確地按降序排列。注意當天是22,當時間跳回到09:07 – Spidy 2011-02-23 23:35:33

+0

Ack!我覺得自己像個白癡一樣不仔細看。對不起,浪費你的時間。 – Knyri 2011-02-25 06:27:06

回答

2

日期和時間正在排序正確。仔細觀察。當一天變成22日,時間又回到頂端,並開始下降。它首先下降日期,然後是時間。

3

您的第二個選擇的訂單是主要是dtime和時間只有當主字段相等時才影響它。換句話說,

order by col1, col2 

將有效地只使用col2訂購那些具有相同col1值的行。

這就是多列排序的工作方式。

如果你想要像升內降日期時間,這將是一個有點棘手,但你得到的也打出來的日期和時間,是這樣的:

order by date(dtime) desc, time(dtime) asc 

而且在這種情況下,我真的考慮將其分成兩個單獨的列以提高效率。您不希望在您的order by子句中執行每行函數 - 最好爲它們分配不同的索引。

但是,我不認爲這是這種情況。由於dtime是日期/時間列,因此您在已經排序日期和時間,所以我不知道你試圖超越這一點。只要在第一個例子中使用order by dtime desc即可,它排序正確。