オンラインルームの予約システムを作成しようとしています。部屋の可用性チェックのSQLクエリ
データベースのテーブルの1つが予約を保持することになっています。自動番号フィールド、顧客データフィールド、到着と出発の2つの日付フィールド、およびその他のテーブルの予約の詳細は、bookedid、roomidおよびroom countです。
検索ページは、到着と出発日を結果ページに提示します。結果ページは、期間内に利用可能な部屋の数があれば顧客に通知することになっています。これはすべてがうまくいかないところです。私はちょうど要求された期間内に既に予約された部屋の数を正確に数えることができません。
予約テーブル
id|guest | arrive | depart 1 |Smith | 2017-12-20 | 2017-12-25 2 |Jones | 2017-12-21 | 2017-12-25 3 |Brown | 2017-12-23 | 2017-12-27 4 |White | 2017-12-24 | 2017-12-26
予約の詳細テーブルテーブル
id | booked_id | room_id |room_count 1 | 1 | 1 | 2 2 | 1 | 2 | 2 3 | 2 | 1 | 4 4 | 3 | 2 | 2 5 | 3 | 1 | 2 6 | 4 | 1 | 2
ルーム - ルームroom_id
はここから来ています。
room_id | type | count |amount 1 | Single room | 10 | 1000 2 | Deluxe room | 5 | 2000
私は(例のために:room_idは1である)特定の部屋の可用性をしたい
date available roomid 2017-12-20 | 8 | 1 2017-12-21 | 4 | 1 2017-12-22 | 4 | 1 2017-12-23 | 2 | 1 2017-12-24 | 0 | 1 2017-12-25 | 0 | 1 2017-12-26 | 4 | 1 2017-12-27 | 8 | 1 2017-12-28 | 10 | 1 2017-12-25 | 10 | 1
私はまた、カレンダーのテーブルを使用しています。私は
のようなクエリを書いていますSELECT x.dt , r.room_cnt - COALESCE(SUM(d.`booking_cnt`),0) available
FROM calendar_table x
LEFT JOIN bookings y ON x.dt >= y.`date_from` AND x.dt < y.`date_to`
LEFT JOIN booking_details d ON d.booking_id=y.id
LEFT JOIN rooms r ON r.id= 1
WHERE x.dt BETWEEN now() AND now() + interval 3 month GROUP BY dt
これは正しく動作していません。
をこのようなクエリを変更します。 – bumperbox
私はこの行を推測しています。 '
'x.dtとy.date_fromとy.date_to'の間にも有効です。 –