用于在两个日期之间选择事件的最佳SQL查询

kur*_*tko 3 mysql sql datetime date

看了很多关于此的帖子.我需要一个很好的方法来选择两个日期之间的事件.可能的条件如下图所示:

活动的日期范围

我的第一次尝试如下:

SELECT *
FROM events
WHERE 
(
 start_date BETWEEN $start_select AND  $end_select
 OR
 end_date BETWEEN $start_select AND $end_select
)
OR
(
 start_date <=  $start_select
 AND
 end_date >= $end_select
)
Run Code Online (Sandbox Code Playgroud)

问题是进行查询需要很长时间.

然后我看到这篇文章:从两个日期之间的日期范围中选择数据,其中@dmlukichev谈到排除所有错误的选项:

像这样的东西:

SELECT *
FROM events
WHERE NOT 
(
 start_date <  $start_select
 OR
 end_date > $end_select
)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有任何想法吗?

Yas*_*lev 7

如果我的条件正确,这就是你需要的.

SELECT * FROM events WHERE (end_date >=  $start_select AND start_date <= $end_select);
Run Code Online (Sandbox Code Playgroud)

您将获得所有事件,其中开始日期在$ end_select之前,结束日期在$ start_select之后.