私は 3 番目のソリューションに取り組んでおり、それらはすべて、レンタル システム内のすべてのコテージと同じ結果をもたらします。
利用可能で、予約されていない、またはブロックされていないコテージのみを表示する必要があります。
これらのクエリで何か問題がありますか?
予約の日付範囲から 1 つをクエリ
SELECT *
FROM `rentals`
WHERE `rental_id` NOT IN (
SELECT `rental_id`
FROM `reservation_dates`
WHERE `end_date` >= $start AND `start_date` <= $end
)
予約可能な日付から 2 つをクエリする
SELECT *
FROM `rentals`
LEFT JOIN `reservation_dates` ON `reservation_dates.rental_id` = `rentals.rental_id`
WHERE (((`reservation_dates.end_date` NOT between $start AND $end) AND
(`reservation_dates.start_date` NOT between $start AND $end)) OR
(`reservation_dates.reservation_id` IS NULL)
)
これが私が持っている3つのテーブルです。Rentals には、すべてのコテージと詳細が含まれています。reservation_dates は、予約と日付の予約に使用されます。blocked_date は、予約できない日付をブロックする追加のテーブルです。私は最初の 2 つのテーブルを接続することから始めました。使用可能なものを取得する必要があるときに、すべてのコテージを取得しています。予約は無視されているようです。
Table 'rentals'
rental_id int
Table 'reservation_dates'
reservation_id int
rental_id int
start_date date
end_date date
Table 'blocked_dates'
blocked_id int
rental_id int
date_from date
date_to date