[英]mysql query for a booking system
我花了超过14个小时的时间试图找到一种方法来实现这一目标,但是没有运气!
我正在使用预订系统,我有2张桌子:
Rooms
---------
ID - ROOM_TYPE - NAME - ROOM_COUNT
1 1 single room 6
2 2 double room 4
3 3 studio 2
Booking
---------
ID - ROOM_TYPE - Customer_NAME - CHECK_IN - CHECK_OUT
1 3 John A 1-1-2013 4-1-2013
2 3 John B 2-1-2013 5-1-2013
3 2 John C 8-1-2013 9-1-2013
用户输入2个日期搜索可用房间后,我进行查询以显示我拥有的所有类型的房间,我有3种类型(单人/双人/单间),每种类型都有酒店的可用房间数量(例如:默认情况下,酒店有6间单人间)
我最终得到这个查询来获取所有可用的类型房间
SELECT *
FROM rooms
where id NOT IN
( SELECT room_type FROM booking
WHERE "'.$check_in.'" <= check_out
AND "'.$check_out.'" >= check_in
)
我需要做出另一个条件,即从预订中减去WHERE计数(“ room_type”),而不是保存在ROOMS表中ROOM_COUNT字段中的值。
根据上面的表格结构,酒店只有两个工作室,并且在2013年4月1日都无法使用。.因此,当有人在该日期进行搜索时,该查询不应显示工作室类型的房间。
我需要计算一下每种房型的预订数,然后显示结果。
先感谢您
这是主意。 您需要知道此期间可容纳的最大房间数。 您可以通过查看当天前的签入数量减去结帐数量,来获得在任一特定日期所获取的房间数量。
接下来,要获得最大值,我们只需要查看当天的入住(因为退房会减少最大值)。 以下内容可在有签到的任何一天获得最大值:
select r.room_type, r.room_count, r.room_count - RoomsTaken
from Rooms r join
(select room_type, max(Num_CheckOuts - num_CheckIns) as RoomsTaken
from (select b.*,
(select count(*) from booking b2 where b2.room_type = b.room_type and b2.check_in <= b.check_out
) as num_CheckIns,
(select count(*) from booking b2 where b2.room_type = b.room_type and b2.check_out <= b.check_in
) as Num_CheckOuts
from booking b
) b
where $check_in <= check_out and $check_out >= check_in
group by room_type
) b
on r.room_type = b.room_type
(注意:此查询未经测试,因此可能存在语法错误。)
它使用相关的子查询来获取累积计数。 在其他数据库中,窗口函数可用于此目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.