【问题标题】:room availability for multiple hotel in mysqlmysql中多家酒店的房间可用性
【发布时间】:2017-07-20 08:52:53
【问题描述】:

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

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

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

来宾 |到达|出发 |预订 |room_id 史密斯 | 2017-06-20 | 2017-06-22 | 3 |1 琼斯 | 2017-06-20 | 2017-06-21 | 2 |1 棕色 | 2017-06-22 | 2017-06-23 | 3 |2 白色 | 2017-06-15 | 2017-06-20 | 4 |1

房间id来自

编号 |类型 |计数 |hotelid 1 |单人间 | 5 | 1 2 |豪华房 | 8 | 1

如果 roomid 1 有 5 个房间,2 有 8 个房间,我想要这样的结果。

可用日期 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

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

【问题讨论】:

  • 84 有什么用? 84 - COALESCE(SUM('booking_cnt'),0)
  • 刚刚输入的房间ID为1的房间数
  • 您为什么不重新设计您的 Room-Table 并为每个 Room 分配一个唯一的 ID?然后您可以为特定房间进行所有预订,查询会更容易。

标签: mysql


【解决方案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,以便更轻松地创建答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 2023-03-05
    • 2013-09-06
    • 1970-01-01
    • 2019-04-27
    • 2012-06-13
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多