mysql - 搜索房间可用性

标签 mysql sql database

这些是我的表格:

房间(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/

相关文章:

c# - 在 INSERT 查询中嵌套 SELECT

mysql - MyBatis能否记录可以直接运行的完整SQL

SQLFiddle:必须声明标量变量错误

sql - TRANSACTION ISOLATION LEVEL SERIALIZABLE 是否会创建 READ 锁

c# - 不支持关键字 : 'attachdbfilename' - MDF Database File (C#)

MYSQL 查询返回特定父项的所有后代

mysql - 基于 20 个表的 SQL 值求和

mysql - 如何创建一个自动递增的字符串?

database - 无法使 Graph Databases 一书中的示例正常工作

database - 如何将数据库附加到 Heroku 中的应用程序?