繁体   English   中英

酒店预订日历预订逻辑问题

[英]Hotel Booking Calendar Reservation logic issue

我正在尝试设置酒店预订系统,但遇到了问题。 我们正在尝试寻找在几天和几个月内都可以使用房间的地方。 以下是我们当前正在使用的四个查询,但是直到一个房间没有任何事件,管理员才能提前预订。 任何帮助都会很棒。

$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";

这段代码中有很多奥秘(例如为什么变量名似乎与它们的用法不匹配),但确实有一点与众不同,$ 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

它的作用是排除三种重叠的日期范围,不显示该时间段内事件开始的房间,不显示该时间段内事件结束的房间,也不显示事件之前的房间并在句点之后结束(完全重叠)。 最后一个看起来像您在尝试避免重复预订客户,因此该部分可能会保留。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM