2011-02-23 60 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即可,它排序正确。