在mysql的多个酒店的房间可用性

时间:2017-07-20 08:52:54

标签: mysql

我正在尝试创建一个在线房间预订系统。

数据库的其中一个表应该包含预订。它有一个自动编号字段,客户数据字段,两个到达和离开的日期字段,以及一个预订房间数的字段。

搜索页面将到达和离开日期提交到结果页面,然后该结果页面应该告知客户该期间内有多少房间可用。这是一切都出错的地方。我无法准确计算所请求期间内已预订的房间数量。

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

我也在使用日历表。 请帮我找一个解决方案

1 个答案:

答案 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以便更轻松地创建答案。