我有一个可用表,如下所示:
id
room_id int(11)
avail_date date
对于每个房间,每个日期都有一行。 可能存在间隙,例如房间1可能有8月1,2,3,5,6,13,14,15的条目,每隔一天它就不可用。
我需要一个查询来查找room_ids列表,其中包含日期范围内每天的可用性。
换句话说,获取一个room_id列表,其中每个房间都有一个条目,用于startdate和enddate之间的每个日期。
答案 0 :(得分:2)
你想要这样的东西:
select room_id
from availability a
where avail_date between $start and $end
group by room_id
having count(*) = datediff($end, $start) + 1;
having
子句计算该期间的行数,以查看它是否与您需要的天数相匹配。这是“包容性”逻辑,因此,如果$start = $end
,则假定您需要该日期的房间。