提供抵达和离开日期之间的房价

时间:2017-09-07 12:27:52

标签: mysql

价格计划主表

CREATE TABLE `price_plan_master` (
  `id` int(11) NOT NULL COMMENT 'Id ( Auto Increment )',
  `room_id` int(11) NOT NULL COMMENT 'Room Id (Related to room_master table)',
  `date` date NOT NULL COMMENT 'Date to get rate',
  `no_of_rooms` int(11) NOT NULL COMMENT 'No of rooms available',
  `rate` double NOT NULL COMMENT 'Room rate',
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Id|room_id|date|no_of_rooms|rate
1|2|2017-10-01|5|8530
2|2|2017-10-02|5|8530
3|3|2017-10-01|5|8200
4|3|2017-10-02|5|8200
5|2|2017-10-01|2|14609
6|2|2017-10-02|2|14609
7|3|2017-10-03|2|14609
8|2|2017-10-04|2|14609
9|3|2017-10-01|2|13000
10|3|2017-10-02|2|13000
11|3|2017-10-03|2|13000
12|3|2017-10-04|2|13000
13|6|2017-10-01|3|17286
14|6|2017-10-02|3|17286
15|6|2017-10-03|3|17286
16|6|2017-10-04|3|17286
17|11|2017-10-01|10|2830
18|11|2017-10-02|10|2830
19|11|2017-10-03|10|2830
20|11|2017-10-04|10|2830
21|12|2017-10-01|2|1700

我想要带有条件的所有房间 在请求的入住和退房日期之间,可用性应该等于或最大请求的房间数(表示no_of_rooms> = 3)。 对于日期范围之间的每个日期,应检查房间的可用性。

目前,我正在使用以下查询。

select * from price_plan_master
where date >= checkin and date <= checkout

我需要检查所有日期的可用性。

有人可以建议我应该在单个查询中更改哪些内容来获取记录?

2 个答案:

答案 0 :(得分:0)

您可以使用添加的AND条件编写的查询:

 select * from price_plan_master
 where date >= checkin and date <= checkout
 and no_of_rooms >= 3

这将选择房间数大于或等于所请求房间数的日期范围内的所有房间。

答案 1 :(得分:0)

SELECT ppm。* 来自price_plan_master ppm 内部联接 ( SELECT room_id,COUNT(room_id)AS cnt,DATEDIFF(checkout,checkin)+1 AS temp 来自price_plan_master WHERE date&gt; = checkin AND date&lt; = checkout AND no_of_rooms&gt; = 3 GROUP BY room_id 有cnt = temp)t ON ppm.room_id = t.room_id