PHP MySQL获取与输入日期重叠的日期

PHP MySQL获取与输入日期重叠的日期,php,mysql,sql,date,overlap,Php,Mysql,Sql,Date,Overlap,我需要从数据库中获取重叠日期行,其中输入的开始和结束日期与数据库中的任何行重叠 查询: SELECT * FROM dates WHERE date_from >= $dateFrom AND date_from >= $dateTill OR date_till >= $dateFrom AND date_till <= $dateTill OR date_from <= $dateFrom AND date_til

我需要从数据库中获取重叠日期行,其中输入的开始和结束日期与数据库中的任何行重叠

查询:

SELECT * 
  FROM dates
 WHERE date_from >= $dateFrom 
   AND date_from >= $dateTill
    OR date_till >= $dateFrom 
   AND date_till <= $dateTill
    OR date_from <= $dateFrom 
   AND date_till >= $dateTill
有什么办法可以改进查询吗

试试这个:

SELECT *
FROM dates
WHERE (date_from BETWEEN $dateFrom AND $dateTill)
   OR (date_till BETWEEN $dateFrom AND $dateTill)
   OR ($dateFrom BETWEEN date_from AND date_end)
在执行一些复杂的逻辑操作时,必须使用括号

还要看看逻辑运算符是如何工作的:


我认为这对你很有帮助。

很多事情都不对劲。我将从2019减去3减去7等于2009开始。为什么不使用一些()?
$dateFrom
$datetil
变量应该用单引号括起来……重叠的逻辑非常简单。事件A可以说是重叠事件B,即事件A在事件B结束之前开始,在事件B开始之后结束。此外,这种解决方案对sql注入非常开放,没有倒逗号,您只需将日期与整数进行比较。因此,虽然不是完全错误,但上面的答案“正确”是毫无意义的。@草莓实际上是的,你是正确的。但我认为问题在于比较日期的逻辑,而不是安全性。
SELECT *
FROM dates
WHERE (date_from BETWEEN $dateFrom AND $dateTill)
   OR (date_till BETWEEN $dateFrom AND $dateTill)
   OR ($dateFrom BETWEEN date_from AND date_end)
select * FROM table_name WHERE (date_from BETWEEN $dateFrom AND $dateTill)  OR (date_till BETWEEN $dateFrom AND $dateTill) OR ($dateFrom BETWEEN date_from AND date_end)