2009-12-01 96 views
5

这似乎是一个典型的问题,但它不同。MySQL按多列合并排序(不按字段1 asc,field2 asc排序)

我有一个ID和3个时间戳字段(简单地)表。最初所有3个字段都为空,并且它们被填充值。行的例子有:

id time1  time2  time3 
1 1259625661 1259643563 null 
2 null  1259621231 null 
3 1259625889 null  1259644511 
4 null  1259621231 null 
5 null  null  1259644511 
6 null  1259621231 null 
7 1259625889 null  null 

我需要的是得到的ID通过最近的时间戳排序(忽略,如果它在时间1,时间2或时间3)的列表。 通过时间1递减,时间2递减,时间3递减做一个为了给我一个错误列表,它首先排序的所有时间1场,那么第二个,等...

预期的结果是ID的列表。

这可以在MySQL中完成单个查询吗?谢谢

回答

12
SELECT * 
FROM mytable 
ORDER BY 
     GREATEST(
     COALESCE(time1, 0), 
     COALESCE(time2, 0), 
     COALESCE(time3, 0) 
     ) DESC 
+1

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest上的版本说明可能对用户询问很有用。 – jensgram 2009-12-01 15:19:55

+0

'@ jensgram':不错的一点。我加了'COALESCE'来处理所有情况。 – Quassnoi 2009-12-01 15:20:47