繁体   English   中英

mysql查询预订系统

[英]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.

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