0

次のように、可用性テーブル ind Mysql があります。

id
room_id int(11)
avail_date date

各部屋には、利用可能なすべての日付の行があります。たとえば、部屋 1 には 8 月の 1、2、3、5、6、13、14、15 のエントリがあり、1 日おきに利用できない場合があります。

日付範囲内で毎日利用できる room_ids のリストを検索するクエリが必要です。

つまり、開始日から終了日までの日付ごとに各部屋のエントリがある room_ids のリストを取得します。

4

1 に答える 1

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、その日に部屋が必要であると想定されます。

于 2013-09-03T11:33:19.767 に答える