我有一个这样的posts
表
+--------------------+--------------+
| Field | Type |
+--------------------+--------------+
| id | int(11) |
| title | varchar(255) |
| body | text |
| published_at | datetime |
+--------------------+--------------+
我想要实现的是通过published_at
order
。通常我会这样做:
SELECT * FROM posts ORDER BY published_at;
但我的要求是查询应该从当前日期开始获取结果,然后是之前的结果,然后是 future 的结果。
目前我的结果如下:
+-------------------------------+----+---------------------+
| title | id | published_at |
+----------------------------------------------------------|
| Hello world | 1 | 2015-01-06 12:21:16 |
| 20+ Tools For RoR Development | 2 | 2015-08-25 12:21:23 |
| Angular JS tutorial | 3 | 2015-09-31 10:51:55 |
| Visual search | 4 | 2015-03-12 12:27:26 |
| Ruby on Rails best practices | 5 | 2015-01-21 00:00:00 |
+-------------------------------+----+---------------------+
而我想要的结果是:
+-------------------------------+----+---------------------+
| title | id | published_at |
+----------------------------------------------------------|
| 20+ Tools For RoR Development | 2 | 2015-08-25 12:21:23 |
| Hello world | 1 | 2015-01-06 12:21:16 |
| Ruby on Rails best practices | 5 | 2015-01-21 00:00:00 |
| Visual search | 4 | 2015-03-12 12:27:26 |
| Angular JS tutorial | 3 | 2015-09-31 10:51:55 |
+-------------------------------+----+---------------------+
最佳答案
不使用 UNION/CASE 的解决方案
SELECT * FROM posts
ORDER BY
DATE(published_at)=DATE(NOW()) DESC,
DATE(published_at)<DATE(NOW()) DESC,
DATE(published_at)>DATE(NOW()) ASC`
检查这是否有效。它可以很好地处理受激数据。您可以根据您对过去和 future 日期的排序要求将 desc 更改为 asc
关于mysql - 根据当前日期对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32201143/