这些是我的表格:
房间
(roomId、roomName、roomTypeId、roomStatus)
房间类型
(roomTypeId、roomTypeName、roomTypeDesc、roomTypePrice)
ReservationRoom
(reservationId、roomId、checkInDate、checkOutDate、totalStay)
我从用户那里收到三个参数(入住日期、退房日期、数量),用于在 GridView 中搜索可以预订的可用房型。
这是我的 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 表已经有一个记录是 checkindate (1/11/2015) 和 check out date (2/11/2015) 由客人 A 为 roomtypeA 创建时出现问题。
当客人B搜索入住日期为(2/11/2015),退房日期为(3/11/2015)时,仍然显示房型A不可用。但它应该可用,因为客人 A 已经在 2/11 退房。那么有什么办法可以让用户B在这种情况下预定房型呢?
最佳答案
您可以将类型 DATE 列转换为 DATETIME列,然后比较一天中的特定时间(即您的特定退房时间,例如上午 11 点)。
或者,将所有时间转换为 UNIX_TIMESTAMP ,然后你将得到更简单的大于/小于比较,因为它只是一个整数。
关于mysql - 搜索房间可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34089476/