2012-02-14 60 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