MySQL按时间戳和枚举排序

时间:2012-02-14 02:37:58

标签: mysql enums timestamp sql-order-by

我试图按时间戳和枚举(主要订单时间戳,"子订单"枚举)对订单进行排序,但似乎只有一个或另一个有效。

这是一个非常简单的表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 个答案:

答案 0 :(得分:2)

尝试

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

时间戳字段包括小时/分钟/秒,因此如果您正在查找实际日期部分,您将获得奇数订单,因为事件必须在同一秒发生,以便子组有意义在你的查询中。

答案 1 :(得分:1)

从MySQL文档中查看此段落:

  

ENUM值根据枚举的顺序排序   成员列在列规范中。 (换句话说,ENUM   值根据其索引号排序。)例如,'a'   在'b'之前为ENUM('a','b')排序,但'b'在'a'之前排序   ENUM('b','a')。空字符串在非空字符串之前排序,并且   NULL值在所有其他枚举值之前排序。阻止   意外结果,按字母顺序指定ENUM列表。您可以   也可以使用ORDER BY CAST(col AS CHAR)或ORDER BY CONCAT(col)来制作   确保列是按词法排序而不是按索引号排序。

每个枚举值都映射到一个数字(它的索引号),这是排序时使用的值。这就是为什么它没有按结果中的字符串表示排序。

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