Mysql中的酒店客房可用性相关表

时间:2018-09-03 05:16:20

标签: php mysql mysqli

我有一个主要基于下表的酒店房间预订应用程序。

我的预订表,

`id`
`category`
`booking_no`
`room_id`
`date`
`guest_id`
`status`

我的房间桌子

`id`
`room_type_id`
`room_no`
`booking_no`
`blocked_from`
`blocked_to`
`status`

我的room_types表

`id`
`category`
`name`
`status`

我的check_inout表

`id`
`booking_no`
`room_id`
`guest_id`
`date`
`inout_status`
`status`

我目前正在使用以下查询来获取可添加预订的可用客房。此查询工作完美,我可以得到我想要的。

$query = "
SELECT r.room_type_id
     , r.id room_id
     , r.room_no
     , t.name room_type_name
  FROM rooms r
  JOIN room_types t
  ON t.id = r.room_type_id 
 WHERE r.id NOT IN 
( SELECT room_id 
       FROM reservations 
    WHERE (date >='$checkin' 
        AND date <'$checkout') 
       AND category = 'Accommodation' 
   AND status=1) 
   AND t.category = 'Accommodation' 
   AND r.status <> 7 
   AND (r.blocked_from > '$checkout' 
 OR r.blocked_to < '$checkin' 
     OR r.blocked_to IS NULL 
     OR r.blocked_from IS NULL) 
 ORDER 
    BY r.room_type_id
     , r.room_no ASC
";

此外,当客人入住房间时,我会将状态插入到 inout_status 字段的状态为 check_inout 的表中。当他结帐时,我正在为inout_status字段插入状态2。另外,我在办理登机手续时会更新房间表中特定房间的预订号,然后在结帐时将其删除。

问题是: 如果一位客人预订了1天的房间,并且在同一天退房(例如:一位客人在01:00 PM签到〜当天06:00 PM退房),那么另一位客人必须有房间才能签到-在。

不幸的是,我无法使用上面的表结构来获取它。因为我正在使用以上查询根据预订表检查可用性。

如果某人可以通过链接 check_inout 表找到一种获取信息的方法,则该方法将为您提供帮助,因为该表具有所有房间的检查和结帐记录。

MySQL在这里http://sqlfiddle.com/#!9/e4747/2

结果我也想获得204个房间,但我不知道该如何获得。

0 个答案:

没有答案