2017-05-16 11 views
0

date_begindate_endフィールドに従って予約をすべて選択する必要があります。私は選択された日付カレンダーの10日間だけを表示するカレンダーを持っています。MySQL - 日付別に予約を予約

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%が、カレンダーや作品に表示さないということですが、1 場合があります。

予約が(カレンダーの上限である)長い10日以上である場合ならば、それが唯一のカレンダーに表示されます:date_beginカレンダーに存在するか

  • date_endが中に存在する

    1. カレンダー

    つまり、いくつかの日付の間にカレンダーにギャップがあることを意味します。

    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

    私はあなたがこれをやろうとしていると思います。

    SELECT * 
    FROM bookings 
    WHERE date_begin <= '2017-05-20' AND date_end >= '2017-05-10' 
    
    0

    Linesofcode-は
    この議論はおよそ datetime動作するはずです。
    (StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)
    イアン・ネルソンに感謝

    関連する問題