我正在尝试创建一个在线房间预订系统。
数据库的其中一个表应该包含预订。它有一个自动编号字段,客户数据字段,两个到达和离开的日期字段,另一个表预订详细信息包括:soldid,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
但这不能正常工作。
答案 0 :(得分:1)
像这样修改查询,
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