MySQL有条件地在两个连接列上排序

时间:2014-03-26 17:31:27

标签: mysql

我有一个MySQL表,其中包含两个日期字段,如下所示:

uid int auto-increment
sponsor_name varchar
date_sent datetime
date_resent datetime

我们假设数据如下:

(1, 'patrick', '2014-03-01 12:30:00', '0000-00-00 00:00:00' )
(2, 'patrick', '2014-03-05 14:30:00', '2014-03-18 00:30:00' )
(3, 'patrick', '2014-03-08 16:30:00', '2014-03-24 00:00:00' )
(4, 'patrick', '2014-03-20 12:30:00', '0000-00-00 00:00:00' )

当我运行SELECT * FROM table ORDER BY date_resent DESC时,我看到数据按预期返回,首先是行有date_resent的行,然后是没有的行:

(3, 'patrick', '2014-03-08 16:30:00', '2014-03-24 00:00:00' )
(2, 'patrick', '2014-03-05 14:30:00', '2014-03-18 00:30:00' )
(1, 'patrick', '2014-03-01 12:30:00', '0000-00-00 00:00:00' )
(4, 'patrick', '2014-03-20 12:30:00', '0000-00-00 00:00:00' )

但我想要的是使用date_sentdate_resent列的某种组合,以便在date_resent为空的情况下('000-00-00 00:00: 00')date_sent在排序中被替换。

期望的结果是数据:

(3, 'patrick', '2014-03-08 16:30:00', '2014-03-24 00:00:00' )
(4, 'patrick', '2014-03-20 12:30:00', '0000-00-00 00:00:00' )
(2, 'patrick', '2014-03-05 14:30:00', '2014-03-18 00:30:00' )
(1, 'patrick', '2014-03-01 12:30:00', '0000-00-00 00:00:00' )

1 个答案:

答案 0 :(得分:2)

怎么样:

SELECT * FROM table
ORDER BY IF(data_resent = '0000-00-00 00:00:00', data_sent, data_resent) DESC

或者如果data_resent非空时总是大于data_sent(我猜它是),那么您可以尝试以下方法:

SELECT * FROM table
ORDER BY GREATEST(data_sent, data_resent) DESC