我有一个主要基于下表的酒店房间预订应用程序。
我的预订表,
`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个房间,但我不知道该如何获得。