這些都是我的表:搜索房間可用性
Room
(roomId,ROOMNAME,roomTypeId,roomStatus)
RoomType
(roomTypeId,roomTypeName,roomTypeDesc,roomTypePrice)
ReservationRoom
(預留ID,roomId,checkInDate ,checkOutDate,totalStay)
我從用戶那裏收到三個參數(入住日期,退房日期,數量),以搜索可用的房間類型用於網格視圖。
這是我的SQL,顯示可用房間類型的儲備。
SELECT rt.roomTypeName, rt.roomTypePrice, count(*) as quantity
FROM Room r,
RoomType rt
WHERE roomStatus = 'Online'
AND r.roomTypeId = rt.roomTypeId
AND NOT EXISTS (SELECT 1 FROM ReservationRoom b
WHERE b.roomId = r.roomId
AND (@CheckInDate BETWEEN b.checkInDate AND b.checkOutDate
OR @CheckOutDate BETWEEN b.checkInDate AND b.checkOutDate
OR (@CheckInDate<= b.checkInDate AND @CheckOutDate >= b.checkOutDate)))
group by rt.roomTypeName, rt.roomTypePrice
Having COUNT(*) >= @quantity";
它工作得很好。但是,當我的ReservationRoom表已經有一個記錄,那就是客人A爲roomtypeA所做的checkindate(1/11/2015)和退房日期(2/11/2015)。
當客人B在入住日期搜索房間是(2015年2月11日)和退房日期是(3/11/2015),它仍然會顯示roomtypeA不可用。但它應該是可用的,因爲客人A已經在2月11日退房。那麼有什麼辦法讓用戶B在這種情況下保留房型?
如果您喜歡,請考慮遵循以下簡單的兩步操作步驟:1.如果您沒有使用阿拉伯膠dy完成後,提供適當的CREATE和INSERT語句(和/或sqlfiddle),以便我們可以更容易地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry