MySQL - 根据日期预订

时间:2017-05-16 20:44:59

标签: mysql sql

我需要根据date_begindate_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天(这是日历的限制),则只会在日历中显示:

  1. 日历中存在date_begin
  2. 日历中存在date_end
  3. 这意味着在某些日期之间日历中存在差距。

    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
    

    如何改善查询?

2 个答案:

答案 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