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)