0

我正在做这个在线预订项目,我在这部分有库存。这是场景。数据库结构:

tbl_guestinfo
   guest_id
   name
   checkin
   checkout
   numAdults
   numChild

tbl_rooms
   room_id
   room_name
   guest_id
   type_id

tbl_roomtype
   type_id
   room_rate
   room_type
   noOf_Rooms

我已经可以从我的查询中得到一个很好的结果,我可以扫描所有可用的房间并显示我想要的所有信息。

SELECT *
FROM tbl_rooms, tbl_roomtype 
WHERE guest_id NOT IN
(
SELECT `guest_id` from tbl_guestinfo where
(`checkin` < ' $varCheckOut' and `checkout`>= '$varCheckOut' )
OR (`checkin`<= '$varCheckIn' and `checkout`> '$varCheckIn' )
OR (`checkin`>= '$varCheckIn' and `checkout`<='$varCheckOut')
)

我需要的是显示所有剩余的 room_type 可用。因此,例如,如果有 5 间标准间和 5 间豪华间,并且在 2012 年 10 月 1 日至 2012 年 10 月 5 日期间,客人 1 占用了 1 间标准间,并且客人 2 在同一日期占用了 1 间豪华房,则该网站将仍然显示标准房和豪华房,因为每个 room_type 还剩 4 间。

请注意,我会将 room_type 放在一个 html 表中,并将 noOf_Rooms 放在一个组合框中。

请帮助研究和阅读很多,但仍然无法弄清楚。预先感谢您的所有帮助。

干杯

4

1 回答 1

0

扩展您的查询:

 SELECT room_type, count(*)
 FROM tbl_rooms, tbl_roomtype 
 WHERE guest_id NOT IN
 (
   SELECT `guest_id` from tbl_guestinfo where
   (`checkin` < ' $varCheckOut' and `checkout`>= '$varCheckOut' )
   OR (`checkin`<= '$varCheckIn' and `checkout`> '$varCheckIn' )
   OR (`checkin`>= '$varCheckIn' and `checkout`<='$varCheckOut')
 )
 GROUP by room_type

我不喜欢你的房间桌子包含 guest_id。制作类似于“预订”表的东西,用于映射客人和房间,并包含所有日期等。

于 2012-09-11T18:02:00.890 回答