【发布时间】:2013-05-25 15:17:24
【问题描述】:
我有两个数据表:
-
tbroom_capacity:roomtype,quantity_room,noteCREATE TABLE `tbroom_capacity` ( `id` int(10) NOT NULL DEFAULT '0', `roomtype` varchar(30) COLLATE utf8_bin DEFAULT NULL, `quantity_room` int(20) DEFAULT NULL, `note` varchar(50) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
数据: https://dl.dropboxusercontent.com/u/50542216/1.png
-
tbbooking:guestid,roomtypeid,quantity_room_booking,startDate,endDateCREATE TABLE `tbbooking` ( `guestid` int(20) DEFAULT NULL, `roomtypeid` varchar(20) COLLATE utf8_bin DEFAULT NULL, `quantity_room_booking` int(20) DEFAULT NULL, `startDate` date DEFAULT NULL, `endDate` date DEFAULT NULL, `id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
数据:
https://dl.dropboxusercontent.com/u/50542216/2.png
我想计算每个房间类型的两个日期之间的剩余房间数。
一个例子:
共有 15 间客房,3 种房型:10 间标准房、2 间高级房、3 间贵宾房
- 2013-05-26 至 2013-05-27 客人 1:3 标准
- 2013 年 5 月 27 日至 2013 年 5 月 28 日客人 2:3 标准
- 客人3想预订2013-05-26至2013-05-28的房间
我试过这个来检索不可用房间的总数:
SELECT sum(quantity_room_booking) FROM tbbooking
where DATE_ADD(endDate,INTERVAL -1 DAY) >= '2013-05-26'
and startDate <= '2013-05-28' GROUP BY roomtypeid
但是结果是:
- 6 标准
- 2 上级
- 3 位贵宾
结果应该是:
- 3 标准
- 2 上级
- 3 位贵宾
【问题讨论】:
-
显示你的表结构和一些示例数据,以节省大家一些时间
-
@DrewPierce:我已经添加了我的结构数据,请帮助我。谢谢!
-
好的,你能提供一些样本数据吗
-
您需要稍微解释一下。在 tbbooking 中,由于 id 是主键,它肯定与 tbroom_capacity.id 无关。看起来好像 tbroom 正在显示一个房间 ID,而 quantity_room 表示有多少人可以在那里住一晚。并且 tbbooking 不是一本实际的书(因为它与特定房间无关),而是对开始和结束以及客人数量以及所需房间类型的预订请求