MySQL按IF和排序日期排序
在MySQL中按日期排序时,我尝试一次性将ASC排序为今天之后的日期,DESC排序为今天之前的日期 我正在做类似的事情:MySQL按IF和排序日期排序,mysql,sorting,Mysql,Sorting,在MySQL中按日期排序时,我尝试一次性将ASC排序为今天之后的日期,DESC排序为今天之前的日期 我正在做类似的事情: SELECT * FROM test ORDER BY IF(created >= NOW(), created, 1) ASC, created DESC 这给了我一个想要的结果: ID CREATED 8 May, 10 2014 11:15:00+0000 7 May, 03 2014 20:47:00+0000 5 May, 02 2014 14
SELECT * FROM test ORDER BY IF(created >= NOW(), created, 1) ASC, created DESC
这给了我一个想要的结果:
ID CREATED
8 May, 10 2014 11:15:00+0000
7 May, 03 2014 20:47:00+0000
5 May, 02 2014 14:00:00+0000
4 April, 30 2014 17:41:00+0000
3 April, 30 2014 17:00:00+0000
1 April, 21 2014 03:30:00+0000
6 March, 23 2014 12:00:00+0000
9 May, 20 2014 20:45:00+0000
10 July, 02 2014 20:30:00+0000
2 June, 30 2015 11:16:00+0000
今天之前是DESC,今天之后是ASC。但是,我想在结果的顶部看到ID的9,10,2块
任何关于如何做到这一点的想法都将不胜感激
测试链接:向order by添加一个附加条件,该条件是日期是过去还是未来的二进制指示器:
SELECT *
FROM test
ORDER BY (created >= NOW()) desc,
IF(created >= NOW(), created, NULL) ASC,
created DESC;
将其拆分为两个sql查询,然后合并结果如何
(SELECT * FROM test WHERE created >= NOW() ORDER BY created ASC)
UNION
(SELECT * FROM test WHERE created < NOW() ORDER BY created DESC)
上面的9,10,2有什么特别的逻辑吗?因为它们是在今天之后。只是为了订货。这是为活动准备的。我想显示的是早晚发生的事情,但也要显示过去发生的事情,从最近传递到最早。联合的结果不符合子查询中的顺序。工会的结果似乎都是一样的,但没有保证。