我试图按时间戳和枚举(主要订单时间戳,"子订单"枚举)对订单进行排序,但似乎只有一个或另一个有效。
这是一个非常简单的表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
如何编写查询以排序第一种情况?
答案 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)来制作 确保列是按词法排序而不是按索引号排序。
每个枚举值都映射到一个数字(它的索引号),这是排序时使用的值。这就是为什么它没有按结果中的字符串表示排序。