MySQL:根据日期获取当前和下一条记录

标签 mysql

我有这张表:

+----+-----------+------------+------------+-----------+
| id |   name    | date_start |  date_end  | is_active |
+----+-----------+------------+------------+-----------+
| 12 | Invernale | 2016-11-01 | 2017-03-31 |         1 |
| 15 | Estivo    | 2016-09-01 | 2016-09-01 |         1 |
+----+-----------+------------+------------+-----------+

我需要获取基于今天的“当前”记录和基于今天的下一条记录。

在我的示例中,“current”是 id 15,“next”是 12。

今天,相同的查询将为当前返回“NULL”(或没有记录),为下一个返回 15。

2016年11月1日,当前为12,下一个没有记录。

2017年4月1日,两者都需要返回无记录。

这些是我的查询,但都将返回 id 15(今天)。

$sql_current = "SELECT * FROM $table WHERE date_start <= '$now' AND date_end >= '$now'";

$sql_next = "SELECT * FROM $table WHERE date_start >= '$now' ORDER BY date_start ASC LIMIT 1";

非常感谢

最佳答案

我猜你可以在 UNION 的帮助下在单个查询中获得这两条记录(如果有的话)(如果我没有误解的话)

(
    SELECT 
    *
    FROM tableName 
    WHERE CURDATE() BETWEEN date_start AND date_end
    LIMIT 1 
)
UNION 
(
    SELECT 
    *
    FROM tableName
    WHERE date_start > CURDATE() 
    ORDER BY date_start 
    LIMIT 1
);

编辑:

如果您想知道哪个条目是current,哪个是next,那么您可以添加一个额外的列currentOrNext,如下所示:

(
    SELECT 
    *,
    'current' AS currentOrNext
    FROM tableName 
    WHERE CURDATE() BETWEEN date_start AND date_end
    LIMIT 1 
)
UNION 
(
    SELECT 
    *,
    'next' AS currentOrNext
    FROM tableName
    WHERE date_start > CURDATE() 
    ORDER BY date_start 
    LIMIT 1
)

关于MySQL:根据日期获取当前和下一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264431/

相关文章:

php - MySQL表仅从EXT js + PHP条目第一次提交

php - 使用 PDO 插入值

c# - Entity Framework DbContext 实例 DataReader 已经打开

mysql - 如何向 MySQL 中的 ENUM 类型列添加更多成员?

php - 有很多值的数组

php - 使用PHP下载存储在MySQL中的文件

MySQL 从另一个表动态 INSERT INTO 非规范化表

php - 如何在 WordPress MySQL 查询中按元键值排序?

mysql - 如何获取行

MySQL not null 约束不起作用