这些都是我的表:搜索房间可用性
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