我有一個航班表和預訂表。MySQL - 凡存在關係添加一個地方,忽略如果不存在
航班有一欄,max_passengers
機票必須在預訂表的方式預訂引用
我在laravel/PHP中使用這一點,但我期待與實際的SQL,因爲幫助flight_id其讓我有點糊塗,我可以現在查詢航班,並通過使用sum(bookings.places_booked)
然後sumtracting從max_passengers
這個數字計算出的左側免費名額,但我怎麼能寫SQL,做:
- 隨機選擇航班
- 如果預訂都對這次飛行總和的預訂名額的量和添加其中< max_passengers
我能做到這一點的一部分,但你怎麼能做到,所以如果沒有預訂都反對由飛行加入/哪裏成爲可選的,並不重要,因爲max_passengers將是免費的地方的數量。
我曾想過在航班表中增加一個free_places
列,但它會出現當前設置避免的問題。
SELECT flights.*, bookings.*
FROM flights
LEFT JOIN bookings ON flights.id = bookings.flight_id
WHERE sum(bookings.places_booked) < flights.max_passengers
GROUP BY flights.id
ORDER BY flights.id ASC
這是我想才達到的事情,但正如我所說,我不知道如何使加盟/其中可選的,所以在沒有關係存在不要緊有關檢查。
EDIT(最終SQL):
SELECT flights.*, bookings.*
FROM flights
LEFT JOIN bookings ON flights.id = bookings.flight_id
GROUP BY flights.id
HAVING COALESCE(sum(bookings.places_booked),0) < flights.max_passengers
ORDER BY RAND()
LIMIT 1