我需要根据date_begin
和date_end
字段选择所有预订。我有一个日历,只显示所选日期日历的10天。
2017-05-15 -> Date chosen by user
2017-05-10 -> Date begin
2017-05-20 -> Date end
目前我的查询如下:
SELECT *
FROM bookings
WHERE ((date_begin >= '2017-05-10' AND date_begin <= '2017-05-20') OR
(date_end >= '2017-05-10' AND date_end <= '2017-05-20'))
现在,所发生的事情是90%的预订确实会在日历上显示并且有效,但有一个 if 。
如果预订超过10天(这是日历的限制),则只会在日历中显示:
date_begin
或date_end
这意味着在某些日期之间日历中存在差距。
2017-05-15 -> Date chosen by user
2017-05-10 -> Date begin
2017-05-20 -> Date end
2017-05-11 -> Date begin reservation
2017-05-27 -> Date end reservation
Shows in calendar? Yes
2017-05-16 -> Date chosen by user
2017-05-11 -> Date begin
2017-05-22 -> Date end
2017-05-11 -> Date begin reservation
2017-05-27 -> Date end reservation
Shows in calendar? Yes
2017-05-17 -> Date chosen by user
2017-05-12 -> Date begin
2017-05-23 -> Date end
2017-05-11 -> Date begin reservation
2017-05-27 -> Date end reservation
Shows in calendar? No!
2017-05-18 -> Date chosen by user
2017-05-13 -> Date begin
2017-05-24 -> Date end
2017-05-11 -> Date begin reservation
2017-05-27 -> Date end reservation
Shows in calendar? No!
2017-05-21 -> Date chosen by user
2017-05-16 -> Date begin
2017-05-27 -> Date end
2017-05-11 -> Date begin reservation
2017-05-27 -> Date end reservation
Shows in calendar? Yes
如何改善查询?
答案 0 :(得分:0)
我认为你正在尝试这样做。
SELECT *
FROM bookings
WHERE date_begin <= '2017-05-20' AND date_end >= '2017-05-10'
答案 1 :(得分:0)
Linesofcode-
这个讨论
datetime应该有效。
(StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)
感谢Ian Nelson