簡體   English   中英

房間可用性檢查的 SQL 查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM