2013-02-13 131 views
1

我正在創建一個房間預訂系統。選擇可預訂房間

我需要創建一個SQL查詢,這樣一旦用戶選擇了一個日期,就會顯示一個特定日期的特定時間的房間列表。但我只儲存預訂的房間。

目前包括在此的3個表是Tbl_RoomTbl_BookingTbl_TimeSlot

Tbl_Room存儲所有不同的房間。

Tbl_Booking店預訂日期,RoomID,TimeslotID,BookingName

Tbl_TimeSlot包括開始時間和結束時間

所以,我要顯示的每個時隙,可用於選定的日期和選定的時間。 SQL查詢我曾嘗試是:

SELECT 
    Tbl_TimeSlot.TimeslotID_PK, 
    Tbl_TimeSlot.StartTime, 
    Tbl_TimeSlot.EndTime, 
    Tbl_Booking.RoomID_FK, 
    Tbl_Booking.BookingName, 
    Tbl_Booking.BookingDate, 
    Tbl_Room.RoomName   
FROM 
    Tbl_Room RIGHT 
    OUTER JOIN 
     Tbl_Booking ON Tbl_Room.RoomID_PK = Tbl_Booking.RoomID_FK 
    RIGHT OUTER JOIN 
     Tbl_TimeSlot ON Tbl_Booking.TimeSlotID_FK = Tbl_TimeSlot.TimeslotID_PK 
WHERE (Tbl_Booking.BookingDate <> @BookingDate) 
    AND (Tbl_Booking.RoomID_FK <> @RoomID) 

但沒有什麼是出現。

有什麼建議嗎?

回答

0

乘法Tbl_Room使用Tbl_TimeSlot CROSS JOIN

SELECT Tbl_Room.RoomName, Tbl_TimeSlot.StartTime 
FROM Tbl_TimeSlot CROSS JOIN Tbl_Room 
EXCEPT 
(SELECT Tbl_Room.RoomName, Tbl_TimeSlot.StartTime 
    FROM Tbl_TimeSlot CROSS JOIN Tbl_Room 
    FULL OUTER JOIN Tbl_Booking 
     ON Tbl_TimeSlot.TimeslotID_PK = Tbl_Booking.TimeSlotID_FK 
WHERE (Tbl_Booking.BookingDate = @BookingDate)) 

該查詢製備:(製備:1天房X時隙),然後用該已被預訂@BookingDate,這樣室X時隙減去空房間&給定日期的空插槽時間(@BookingDate)。

+0

謝謝你的幫助,它的工作! – Claire 2013-02-18 17:14:59

+0

我剛剛注意到,比如說如果某個特定日子的9號廣告位被預訂了1號房間,那麼該廣告位並未顯示在正確的結果上。然而,它也沒有顯示在2號房間,儘管那個房間在那個時間還沒有被預訂。你有什麼建議出了什麼問題?謝謝 – Claire 2013-02-19 15:40:00

0

由於您需要特定時間段的空餘房間,因此我認爲您應該有2個輸入參數:@FromBookingDate@ToBookingDate

然後,您可以在該期間查詢數據庫中的房間是佔用

擁有房間清單後,您只需假定其他房間可用。

例得到有人佔用的房間:

select b.RoomId from Tbl_Booking b 
inner join Tbl_TimeSlot s on b.RoomId = s.RoomId 
where s.StartTime <= @ToBookingDate and s.EndTime > @FromBookingDate 

獲得可用客房:

select * from Tbl_Room where id not in (...<occupied rooms>...) 
0

你想每一個房間的外連接,然後篩選對那些沒有預訂房間。也就是說,使用外連接,其他表爲NULL的記錄。

SELECT ... 
FROM Tbl_Room 
    LEFT OUTER JOIN Tbl_Booking ON Tbl_Room.RoomID_PK = Tbl_Booking.RoomID_FK 
WHERE Tbl_Booking.BookingDate = @BookingDate 
    AND Tbl_Booking.RoomID_FK IS NULL 
相關問題