2016-06-13 69 views
1

user结构:mysql命令由两个unixtime列组合在一起

id(PK)(int) 
name(varchar) 
time1(int10) unixtime 
time2(int10) unixtime 

SELECT * FROM `user` ORDER BY `time1` DESC,`time2` DESC 


+------------------------------------------------------+ 
| id  | name |  time1  |  time2  | 
+------------------------------------------------------+ 
| 12345  | Joe | 1405605785 | 1406733506 | 
| 12346  | John | 1406733506 |     | 
| 12347  | David |    | 1405684190 | 
+------------------------------------------------------+ 

我使用这个SQL语句:

SELECT * FROM `user` ORDER BY `time1` DESC,`time2` DESC 

如何两列的时间相结合,分类说明?

============

为鹭

更多例子回复

+------------------------------------------------------+ 
| id  | name |  time1  |  time2  | 
+------------------------------------------------------+ 
| 12345  | Joe | 1   | 2    | 
| 12346  | John | 5   |     | 
| 12347  | David |    | 4    | 
+------------------------------------------------------+ 

我想有点像那个(DESC)

John (time = 5) 
David (time = 4) 
Joe (time max value = 2) 
+1

什么是您预期的结果? – Blank

+2

'SELECT * FROM user ORDER BY coalesce(time1,time2)DESC' –

+0

感谢juergen,但结果仍然像ORDER BY time1 DESC,time2 DESC – Sky

回答

1

这是所谓的条件排序使用CASE EXPRESSION

SELECT * FROM `user` t 
ORDER BY CASE WHEN t.time1 is null THEN t.time2 ELSE t.time1 END DESC 

也可以写为:

ORDER BY coalesce(t.time1,t.time2) 

你没有提供任何预期的结果,而你没说由列的结果应该在的情况下,责令两time1,time2NULL,所以我估计你希望它由第一列排序。如果不是这种情况,请用time2替换time1

试试这个:

ORDER BY GREATEST(t.time1,t.time2) DESC 
+0

谢谢,但结果仍然像ORDER BY 'time1' DESC,'time2' DESC – Sky

+0

你想如何订购? @Sky – sagi

+0

我编辑了我的主题内容。 :) – Sky