MySQL 日期预订

Posted

技术标签:

【中文标题】MySQL 日期预订【英文标题】:MySQL date reservation 【发布时间】:2012-07-22 23:28:52 【问题描述】:

我试图找到一个类似的问题,但没有找到确切的问题,所以我会发布我的:

我有 2 张桌子:

房间 (room_id) room_reservation(room_id,日期)

如何返回在 2 个日期之间至少有 1 天免费的房间列表。

例如,如果我有这些房间:

room_id 1、2 和 3

然后在 room_reservation 表中,我有以下内容:

1 - 2012-07-22
1 - 2012-07-23
1 - 2012-07-24
1 - 2012-07-25
1 - 2012-07-26
2 - 2012-07-23
2 - 2012-07-24

然后搜索 2012-07-22 和 2012-07-26 之间的可用房间应该只返回房间 #2 和 #3。

到目前为止我有这个查询,但没有工作...请帮助!

SELECT DISTINCT room_id AS id
FROM room
WHERE (SELECT COUNT('listing') FROM listing_calendar WHERE listing = l.listing_id AND date BETWEEN '2012-07-22' AND '2012-07-26' GROUP BY listing) < 5"

感谢您的帮助!

【问题讨论】:

【参考方案1】:

你可以使用这个解决方案:

SELECT    a.room_id
FROM      rooms a
LEFT JOIN room_reservations b ON 
          a.room_id = b.room_id AND
          b.date BETWEEN '2012-07-22' AND '2012-07-26'
GROUP BY  a.room_id
HAVING    COUNT(b.room_id) < DATEDIFF('2012-07-26', '2012-07-22') + 1

SQLFiddle Demo

【讨论】:

以上是关于MySQL 日期预订的主要内容,如果未能解决你的问题,请参考以下文章

用于预订的 MySQL 查询。如何允许在同一日期进行两次预订(入住/退房)

没有重复数据的 MySQL 最近日期

创建预订系统,但我很难将输入日期插入MySQL表

查找预订重叠以检查日期可用性

需要一个 MySQL 查询来获取未在表中注册的日期

我应该如何在 mysql 中存储可用性日历信息?对于 [id] [日期] [可用/不可用]