Php 如何筛选已预订的房间插槽。我需要房号

Php 如何筛选已预订的房间插槽。我需要房号,php,mysql,sql,Php,Mysql,Sql,我正在对多供应商酒店预订系统进行编码,我需要将酒店房间过滤为预订已满或未满。我有两张桌子,一张是包含房间信息,一张是预订信息。我有房间配额,当客户选择日期入住和退房时,我会尝试这样做mysql代码计数预订包括日期并减去房间配额如果房间配额=0,房间id会删除列表 你们可以查一查表,我可以告诉你们预定的具体日期。但我需要从room_配额中减去,并显示大于0的结果,仅显示room_id SQL FIDLE包含完整的代码,但如果您想查看以下表格: CREATE TABLE `reservation_l

我正在对多供应商酒店预订系统进行编码,我需要将酒店房间过滤为预订已满或未满。我有两张桌子,一张是包含房间信息,一张是预订信息。我有房间配额,当客户选择日期入住和退房时,我会尝试这样做mysql代码计数预订包括日期并减去房间配额如果房间配额=0,房间id会删除列表

你们可以查一查表,我可以告诉你们预定的具体日期。但我需要从room_配额中减去,并显示大于0的结果,仅显示room_id

SQL FIDLE包含完整的代码,但如果您想查看以下表格:

CREATE TABLE `reservation_list` (
  `reservation_id` int(11) NOT NULL,
  `room_id` int(11) NOT NULL,
  `customer_id` int(11) NOT NULL,
  `reservation_check_in_date` date NOT NULL,
  `reservation_check_out_date` date NOT NULL,
  `reservation_price_total` int(11) NOT NULL,
  `reservation_status` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `reservation_list` (`reservation_id`, `room_id`, `customer_id`, `reservation_check_in_date`, `reservation_check_out_date`, `reservation_price_total`, `reservation_status`) VALUES
(1, 2, 1, '2019-07-21', '2019-07-24', 150, 0),
(2, 26, 2, '2019-07-25', '2019-07-30', 250, 1),
(3, 3, 3, '2019-08-21', '2019-08-30', 950, 2),
(4, 4, 4, '2019-08-21', '2019-08-30', 500, 2),
(5, 1, 1, '2019-07-25', '2019-07-30', 250, 1),
(6, 1, 3, '2019-07-21', '2019-07-24', 150, 0);

CREATE TABLE `room_list_hotel` (
  `room_id` mediumint(9) NOT NULL,
  `hotel_id` mediumint(9) NOT NULL,
  `room_type` int(1) NOT NULL,
  `room_price` smallint(6) NOT NULL,
  `room_quota` smallint(6) NOT NULL,
  `room_m2` int(11) NOT NULL,
  `room_status` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



INSERT INTO `room_list_hotel` (`room_id`, `hotel_id`, `room_type`, `room_price`, `room_quota`, `room_m2`, `room_status`) VALUES
(1, 1, 1,  50, 25, 0, 1),
(2, 2, 2, 65, 35, 0, 1),
(3, 3, 1,  75, 15, 0, 1),
(4, 4, 2,  35, 5, 0, 1);
问题是:

SELECT reservation_list.room_id, 
COUNT(reservation_list.reservation_id) AS reservation_total_that_days
FROM  reservation_list WHERE reservation_list.room_id IN 
( SELECT reservation_list.room_id FROM reservation_list
 WHERE (reservation_list.reservation_check_in_date<='2019-07-21' and 
        reservation_list.reservation_check_out_date>='2019-07-21') OR 
 (reservation_list.reservation_check_in_date<'2019-07-24' and 
  reservation_list.reservation_check_out_date>='2019-07-24') OR 
 (reservation_list.reservation_check_in_date>='2019-07-21' and 
  reservation_list.reservation_check_out_date<'2019-07-24')) 
  GROUP BY reservation_list.room_id



我怎样才能解决这个问题?谢谢大家!

这是一个中间结果

SELECT h.room_id
     , h.room_quota
     , r.reservation_id 
     , r.reservation_check_in_date checkin
     , r.reservation_check_out_date  checkout
  FROM room_list_hotel h 
  LEFT 
  JOIN reservation_list r 
    ON r.room_id = h.room_id 
   AND r.reservation_check_in_date <= '2019-07-24' 
   AND r.reservation_check_out_date >= '2019-07-21';

+---------+------------+----------------+------------+------------+
| room_id | room_quota | reservation_id | checkin    | checkout   |
+---------+------------+----------------+------------+------------+
|       2 |         35 |              1 | 2019-07-21 | 2019-07-24 |
|       1 |         25 |              6 | 2019-07-21 | 2019-07-24 |
|       3 |         15 |           NULL | NULL       | NULL       |
|       4 |          5 |           NULL | NULL       | NULL       |
+---------+------------+----------------+------------+------------+
选择h.room\u id
,h.room_配额
,r.U.id
,r.预订\入住\日期入住
,r.预订\退房\日期结账
从h酒店的房间列表
左边
加入预订列表
在r.room\u id=h.room\u id上
r.预订登记日期='2019-07-21';
+---------+------------+----------------+------------+------------+
|房号|房号|配额|预订|房号|入住|结帐|
+---------+------------+----------------+------------+------------+
|       2 |         35 |              1 | 2019-07-21 | 2019-07-24 |
|       1 |         25 |              6 | 2019-07-21 | 2019-07-24 |
|3 | 15 |空|空|空|
|4 | 5 |空|空|空|
+---------+------------+----------------+------------+------------+
我看不出你是如何从这里得到你想要的结果的

编辑:

您当前的结果如下所示:

+---------+------------+-----------+------------+
| room id | room_quota | total_res | FREE SLOTS |
+---------+------------+-----------+------------+
| 1       |         25 |         2 |         23 | <-- THIS SAYS 23
+---------+------------+-----------+------------+
|房间id |房间配额|总可用空间|免费插槽|
+---------+------------+-----------+------------+

|1 | 25 | 2 | 23 |请编辑您的问题,并发布此示例数据的预期结果。我添加了我想要的内容。“我需要从房间所有插槽中减去在特定日期后有空闲插槽的房间id。”。我只需要room_id,因为我正在使用PHP过滤器。@strawberry不清楚吗@草莓我不知道如何从你的数据中得到想要的结果。样本数据和预期结果似乎不相符。我也不明白这些数据的含义。你真的想把35个人放在一个房间里吗?这不是第三栏的“预订id”,而是总预订天数,这意味着入住和退房范围房间有预订总数。因此,第四列的意思是(房间配额)-(总预订天数)=免费时段这是一个减法操作。我想从基于两个日期之间的客户搜索的最大预订数量中减去房间的总预订数量。我这里的主要问题是,随着客户搜索日期的变化,房间中的预订数量需要动态确定,因此我无法执行减法操作,因为其中一个数据不是常量。简单地说,我只想从两个不同的表中减去数据。但是,虽然一个表中的数据是固定的,但另一个表中的数据必须是动态的,而不是常量。是的,这是正确的,但我需要在表中预订多少房间1和2?我需要看到一个预订,因为例如房间1配额25,当天有一个预订,所以总免费插槽=24。我需要看到25-1=24的结果。也非常感谢您的帮助。您的结果显示“23”如何?我不明白。我的结果必须计算25(房间配额)-1(预定了所需的一天客户搜索)=24(这是一个可预订的免费场所),清楚吗?
+---------+------------+-----------+------------+
| room id | room_quota | total_res | FREE SLOTS |
+---------+------------+-----------+------------+
| 1       |         25 |         2 |         23 | <-- THIS SAYS 23