1

我有两个数据表:

  • tbroom_capacity: roomtype, quantity_room,note

    CREATE 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,endDate

    CREATE 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 间贵宾房

  • 嘉宾1:3标准从2013-05-26到2013-05-27
  • 嘉宾2:2013-05-27至2013-05-28的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 贵宾
4

1 回答 1

0

您可以再添加一个布尔列,例如已预订,并使用该列值查询值

例子:

SELECT sum(quantity_room_booking) FROM tbbooking where DATE_ADD(endDate,INTERVAL -1 DAY) >= '2013-05-26' and startDate <= '2013-05-28' and Is booking=true GROUP BY roomtypeid

我希望这将有助于您获得房间类型的数量

于 2013-05-29T09:41:18.500 回答