mysql - 根据当前日期对数据进行排序

标签 mysql sql

我有一个这样的posts

+--------------------+--------------+
| Field              | Type         |
+--------------------+--------------+
| id                 | int(11)      |
| title              | varchar(255) |
| body               | text         | 
| published_at       | datetime     |
+--------------------+--------------+

我想要实现的是通过published_atorder。通常我会这样做:

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/

相关文章:

php - 使用 PHP 在 sql 查询中传递字符串数组

PHP PDO 总是只给出一个结果

mysql - MySQL 是否可以处理 100 亿行包含 10-12 列的数据?

java - 如何从 Java 列表创建 SQL 数组?

sql - 子查询与带有 WHERE 子句的传统连接?

MySQL 错误 "empty string given as argument for ! character"

php - 如何仅选择 friend 和查看用户的帖子

mysql - JPA/Hibernate 连接表/连接列 ID 未标记为外键?

mysql - 如何在MySQL中插入语句后获取id

mysql - 使用 LIKE 和 WHERE 子句显示完整表