2015-11-09 75 views
0

我正在尝试设置酒店预订系统并遇到问题。我们正在努力寻找在多天和几个月内可以使用房间的地方。以下是我们目前正在使用的四个查询,但管理员无法提前预订,直到有一个房间没有任何活动。任何帮助都会很棒。酒店预订日历预订逻辑问题

$sql_statementxf1 = "Select * FROM Hotels 
    WHERE EXISTS (
    Select * FROM cal_events 
    WHERE start_date >= $end_dated 
    AND cal_events.HotelID = Hotels.HotelID 
    ORDER BY start_date) 
    AND HotelID>0 
    AND Class != 'HO' 
    ORDER BY HotelBlock, HotelNumber"; 
$sql_statementxf = "Select * FROM Hotels 
    WHERE EXISTS (
    Select * FROM cal_events 
    WHERE end_date >= $start_dated 
    AND cal_events.HotelID = Hotels.HotelID) 
    AND NOT EXISTS ( 
    select * from cal_events 
    WHERE start_date=$start_dated 
    AND cal_events.HotelID = Hotels.HotelID) 
    AND HotelID>0 
    AND Class != 'HO' 
    ORDER BY HotelBlock, HotelNumber"; 
$sql_statementxf2 = "Select * FROM Hotels 
    WHERE NOT EXISTS ( 
    Select * FROM cal_events 
    WHERE cal_events.HotelID = Hotels.HotelID) 
    AND HotelID>0 
    AND Class != 'HO' 
    ORDER BY HotelBlock, HotelNumber"; 
$sql_statementxf3 = "Select * FROM Hotels 
    WHERE EXISTS ( 
    Select * FROM cal_events 
    WHERE start_date=$start_dated 
    AND end_date = $end_dated 
    AND CustomerID = $custid 
    AND PersonID != $personid 
    AND cal_events.HotelID = Hotels.HotelID) 
    AND HotelID>0 
    AND Class!='HO' 
    ORDER BY HotelBlock, HotelNumber"; 

回答

0

有很多奥秘在这个代码(如为什么变量名称似乎不与如何使用它们匹配),但有一点确实鹤立鸡群,$ sql_statementxf2没有其他的像部分。 Xf,XF1和XF3对日期都非常小心。 XF2完全忽略日期,并且不包括所有带日历事件的任何酒店。这听起来像是你所描述的问题行为,因为这是它唯一要做的评论,看看它是否能让你获得你想要的结果。

要稍微偏离问题,看起来您正在尝试的是找到没有您提供的范围日历条目的房间。我不知道你是如何结合前三声明,但他们都通过使用简单或语句代替:

select Hotels.* from Hotels 
    where not exists 
    (
    select * from cal_events 
    where cal_events.HotelID = Hotels.HotelID 
     and (cal_events.start_date between $start_Date and $End_Date 
     or cal_events.end_date between $start_Date and $End_Date 
     or (cal_events.start_date < $start_Date and cal_events.end_date > $End_date)) 
    ) 
     AND HotelID>0 
     AND Class != 'HO' 
    ORDER BY HotelBlock, HotelNumber 

那是什么做的是它不包括三种类型的重叠的日期范围,不要” t显示在此期间活动开始的房间,不显示活动在此期间结束的房间,并且不显示活动在活动开始之前和结束之后开始(完全重叠)的房间。最后一个看起来像你试图避免客户的双重预订,所以该部分可能会停留。