タイトルが本当にばかげていることは知っています。これをどのように説明できるかわかりませんでした。
これは私のテーブル構造です
レンタカーのホームページです。私がやっていることは、特に「pickup_date」と「dropoff_date」で車が予約されているかどうかを把握しようとしていることです。このクエリで予約車を取得できます
SELECT
cars.model,
reservations.pickup_date,
reservations.dropoff_date,
reservations.car_id
FROM
cars
INNER JOIN reservations ON cars.car_id = reservations.car_id
WHERE
reservations.pickup_date <= '2012-04-08 10:50:26' OR
reservations.dropoff_date >= '2012-04-20 10:50:26'
ただし、予約されていない車もあり、すべての車種を予約しているわけではないため、このクエリには表示されません。私は車のテーブルにそれらを持っています。
要するに、このクエリから取得したものを、すべての車のモデルを含むテーブルから削除する必要があります。したがって、予約されていない車+予約日後に利用できる車があります。
クエリから取得した結果を取得し、この結果をcarsテーブルから削除します。その後、それは私に表示されます。
PHPでできます。しかし、mysqlで1クエリでできるのか知りたいです。
これは@cbuckleyの助けを借りて思いついた解決策です
SELECT
cars.*
FROM cars
LEFT JOIN (
SELECT
cars.car_id
FROM
cars
INNER JOIN reservations
ON cars.car_id = reservations.car_id
WHERE
(reservations.pickup_date <= '2012-04-08 10:50:26' AND reservations.dropoff_date >= '2012-04-20 10:50:26') OR
(reservations.pickup_date >= '2012-04-08 10:50:26' AND reservations.pickup_date <= '2012-04-20 10:50:26') OR
(reservations.dropoff_date <= '2012-04-20 10:50:26' AND reservations.dropoff_date >= '2012-04-08 10:50:26')
) AS reserved_cars
ON reserved_cars.car_id = cars.car_id
WHERE reserved_cars.car_id IS NULL;