表格如下
rooms(RoomId(PK)(int),
RoomName(varchar))
bookings(RoomId(FK)(int),
From_D(date),
To_D(date),
Bookee(varchar))
(PK-primary Key ,FK-foreign Key)
鉴于 arrival(From_D)
以及 departure(To_D)
日期如何找到可用房间的id
我试过:
SELECT DISTINCT RoomId
FROM bookings
WHERE arrival not in(From_D,To_d) AND
departure not in(From_D,To_d)
但是,如果数据库中存储了多个房间的预订,并且即使在该日期范围内房间不是免费的,它也会预订房间,那么就会出现我的数据库结构问题
4条答案
按热度按时间46qrfjad1#
请看下面的图表(很抱歉字迹不好):
在上图中,我们可以看到横轴上的日期范围。
From_D
至To_D
表示特定房间的已预订插槽。到达和离开日期考虑了四种情况(由ai和di表示)。我们可以清楚地看到,只有当到达和离开日期完全在预定位置的左侧或右侧时,特定的房间才可用。
我们可以
GROUP BY
在RoomID
并且只考虑那些房间,每个房间的预订都遵循上面定义的标准,使用HAVING
条款。查询将简单地如下所示:
db小提琴演示
查询:查看2018-11-01和2018-11-03之间的可用性
结果:根据样本数据,只有roomid 4可用
00jrzges2#
在和约会对象之间使用
x8goxv8g3#
brccelvz4#