PHP MySQL 与输入日期相比得到重叠日期

PHP MySQL getting overlapping dates compared to input date

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

查询:

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

目前我有一行开始日期:2019-03-11 和结束日期 2019-03-17

此时查询会跳过这些日期:

Beginning: 2019-03-07
End: 2019-03-16

有什么改进查询的想法吗?

试试这个:

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)

在进行一些复杂的逻辑运算时,必须使用括号。

另请参阅逻辑运算符的工作原理:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

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)

我觉得对你有帮助。