2012-09-11 77 views
0

我正在致力於此在線預訂項目,並且我在此部分中有存貨。這是場景。 數據庫結構:mysql查詢顯示在線酒店預訂的剩餘房間類型

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') 
) 

我需要的是顯示所有可用的剩餘房間類型。例如,如果在2012年1月1日至2012年10月5日期間有5個標準間和5個豪華間以及1個標準間被guest1佔用,並且1個豪華間由guest2同時佔用,那麼該網站將仍然是顯示標準間和豪華間,因爲每個room_type都有4個左側。

請注意,我將把room_type放在html表格中,noOf_Rooms留在組合框中。

請幫助一直在研究和閱讀很多,但仍然無法弄清楚。預先感謝您的幫助。

乾杯

+0

您可以使用BETWEEN,可能會更好。可能的誘惑,http://stackoverflow.com/questions/1080207/mysql-select-all-data-between-two-dates – wesside

回答

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。製作一張「預訂」表,映射客人和房間,幷包含所有日期等。