[英]SQL query for room availability check
我正在嘗試創建一個在線房間預訂系統。
數據庫的表之一應該保存預訂。 它有一個自動編號字段、客戶數據字段、兩個用於到達和離開的日期字段,並且花葯表預訂詳細信息有:bookedid、roomid 和房間計數。
搜索頁面將到達和離開日期提交到結果頁面,然后該頁面應該告訴客戶在此期間有多少房間可用(如果有的話)。 這就是一切都出錯的地方。 我只是無法准確計算在要求的時間內已預訂的房間數量。
預訂表
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
但這不能正常工作。
像這樣修改查詢,
SELECT x.dt , r.room_cnt,SUM(d.`booking_cnt`) booked,r.room_cnt- SUM(d.`booking_cnt`) 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 and d.room_id='1'
LEFT JOIN rooms r ON r.id= 1
WHERE x.dt BETWEEN now()-interval 3 month AND now() + interval 3 month GROUP BY dt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.