データベースに次のテーブルがあります。1 .Roomtypes
2 .Reservations
Roomtypes
には次の列がありますid
、product_id
、type
、total_no_of_rooms
、created_at
、updated_at
Reservation
には次の列がありますid
、roomtype_id
、customer_id
、check_in
、check_out
、no_of_rooms
、created_at
、updated_at
、
誰かが部屋を予約した場合、ルームタイプテーブルに残っている部屋を取得する必要があります。それは、特定の日付の部屋、予約されていない部屋の詳細です。誰もがクエリで私を助けることができます
テーブルCREATE
スクリプトがない場合、私の推測は次のようになります。
SELECT rt.id, rt.type, rt.total_no_of_rooms,
IFNULL(SUM(r.no_of_rooms), 0) as "reserved rooms",
rt.total_no_of_rooms - IFNULL(SUM(r.no_of_rooms),0) as "rooms available"
FROM Roomtypes rt
LEFT OUTER JOIN Reservation r ON r.roomtype_id = rt.id
AND CURRENT_TIMESTAMP BETWEEN r.check_in AND r.check_out
GROUP BY rt.id, rt.type, rt.total_no_of_rooms
このクエリは、各部屋タイプで利用可能な部屋の数を取得する必要があります(CURRENT_TIMESTAMP
)ですが、他のタイムスタンプに置き換えることができます。 「2018-05-17 10:00:00」。
データ範囲内で利用可能な部屋の数を確認するには、2018-04-11 10:00:00にチェックインし、2018-04-12 09:59:59に最新のチェックアウトします。
SELECT rt.id, rt.type, rt.total_no_of_rooms,
IFNULL(SUM(r.no_of_rooms), 0) as "reserved rooms",
rt.total_no_of_rooms - IFNULL(SUM(r.no_of_rooms),0) as "rooms available"
FROM Roomtypes rt
LEFT OUTER JOIN Reservation r ON r.roomtype_id = rt.id
AND '2018-04-11 10:00:00' >= r.check_in
AND '2018-04-12 09:59:59' <= r.check_out
GROUP BY rt.id, rt.type, rt.total_no_of_rooms