我正在尝试创建一个在线房间预订系统。
数据库的其中一个表应该包含预订。它有一个自动编号字段,客户数据字段,两个到达和离开的日期字段,以及一个预订房间数的字段。
搜索页面将到达和离开日期提交到结果页面,然后该结果页面应该告知客户该期间内有多少房间可用。这是一切都出错的地方。我无法准确计算所请求期间内已预订的房间数量。
guest | arrive | depart |booked |room_id Smith | 2017-06-20 | 2017-06-22 | 3 |1 Jones | 2017-06-20 | 2017-06-21 | 2 |1 Brown | 2017-06-22 | 2017-06-23 | 3 |2 White | 2017-06-15 | 2017-06-20 | 4 |1
房间ID来自
id | type | count |hotelid 1 | Single room | 5 | 1 2 | Deluxe room | 8 | 1
如果房间1有5个房间,2个有8个房间,我希望得到这样的结果。
date available roomid 2017-06-20 | 0 | 1 2017-06-20 | 8 | 2 2017-06-21 | 2 | 1 2017-06-21 | 8 | 2 2017-06-22 | 5 | 1 2017-06-22 | 5 | 2
我也在使用日历表。 请帮我找一个解决方案
答案 0 :(得分:1)
以下查询怎么样?它返回房间类型,日期,可用房间(如此类房间的总数,而不是剩余的房间)和预订的房间,适用于每种房型和日期。
select b.roomid, c.dt, sum(r.count) as total_rooms,
coalesce(sum(b.booking_cnt), 0) as booked_rooms
from calendar_table as c
left join bookinglist b on c.dt between b.date_from and b.date_to
left join rooms as r on b.roomid = r.id
where c.dt between DATE_START and DATE_END
group by b.roomid, c.dt
order by b.roomid, c.dt
然后在前端,可以减去total_rooms和booked_rooms列以获取可用的房间号。
请记住,我没有架构或数据来测试此查询,但它应该让您知道下一步该怎么做。下次您可以创建SQL Fiddle以便更轻松地创建答案。