MySQL日期预订

时间:2012-07-22 23:28:52

标签: mysql

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

我有两张桌子:

  • room(room_id)
  • room_reservation(room_id,date)

如何返回两个日期之间至少有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 个答案:

答案 0 :(得分: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