gpt4 book ai didi

php - 根据开始日期和结束日期查询今天到一周后发生的多日事件列表

转载 作者:行者123 更新时间:2023-11-29 14:29:29 25 4
gpt4 key购买 nike

我有一个表,其中包含带有开始日期和结束日期的事件列表。我可以通过以下内容成功获取今天发生的事件列表:

SELECT * FROM event WHERE CURDATE() BETWEEN start_date and end_date

或者从今天起一周内发生的事件列表,其中包含以下内容:

SELECT * FROM event WHERE DATE_ADD(CURDATE() INTERVAL 1 WEEK) BETWEEN start_date and end_date

但是,我想要一份从今天到一周后(含)之间任何时间发生的事件的列表。请记住,每个事件都会跨越多天,并由开始日期和结束日期定义,而不是单日事件。

是否有一种简单的方法来查询此内容,或者使用上面的第一个查询在 PHP 中循环每一天(将 CURDATE 替换为从今天到一周后的每一天)会更容易吗?

最佳答案

我喜欢想象这样的问题。据我了解您的问题,应返回四种类型的事件:

          |-------------------- WEEK ---------------------|
| |
| |========== EVENT ==========| |
|========== EVENT ==========| |
| |========== EVENT ==========|
|========================= EVENT =========================|
| |
|-----------------------------------------------|

这意味着我们有:

  • 在一周内开始和结束的事件;
  • 在本周之前开始并在本周结束的事件;
  • 在一周内开始并在一周后结束的事件;
  • 在本周之前开始并在本周之后结束的事件。

将其转换为 SQL 会得到以下结果:

SELECT *
FROM events
WHERE (start_date >= CURDATE() AND end_date <= CURDATE() + INTERVAL 1 WEEK)
OR (start_date < CURDATE() AND end_date >= CURDATE() )
OR (start_date <= CURDATE() + INTERVAL 1 WEEK
AND end_date > CURDATE() + INTERVAL 1 WEEK)
OR (start_date < CURDATE() AND end_date > CURDATE() + INTERVAL 1 WEEK);

我用过>=<=对于一周内的日期。这样我们就可以确保在一周期间开始或结束时开始或结束的事件也包括在内。

<小时/>

假设start_date <= end_date对于所有行都成立,更简单的方法是:

SELECT *
FROM events
WHERE start_date <= CURDATE() + INTERVAL 1 WEEK
AND CURDATE() <= end_date

关于php - 根据开始日期和结束日期查询今天到一周后发生的多日事件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com