我有如下所示的ind Mysql可用性表:
id room_id int(11) avail_date date
每个房间的每个可用日期都有一行。可能存在间隙,例如,房间1可能有8月1,2,3,5,6,13,14,15的条目,隔天不可用。
我需要查询以找到room_ids列表,其中在日期范围内每天都有可用的空间。
换句话说,获取room_id列表,其中在开始日期和结束日期之间的每个日期都有每个房间的条目。
您想要这样的东西:
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,则假定您需要该日期的房间。
having
$start = $end