Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:酒店预订服务的复杂查询_Php_Mysql_Sql - Fatal编程技术网

Php MySQL:酒店预订服务的复杂查询

Php MySQL:酒店预订服务的复杂查询,php,mysql,sql,Php,Mysql,Sql,以下是我的数据: 表:有房间吗 ID date user room_id ------------------------------ 1 2018-04-02 1 10 2 2018-04-03 1 10 3 2018-04-04 1 10 4 2018-04-02 1 20 5 2018-04-03 1 20 6 2018-04-04

以下是我的数据:

表:有房间吗

    ID  date        user  room_id 
   ------------------------------
    1   2018-04-02  1     10
    2   2018-04-03  1     10
    3   2018-04-04  1     10

    4   2018-04-02  1     20
    5   2018-04-03  1     20
    6   2018-04-04  1     20

    7   2018-04-02  2     11
    8   2018-04-04  2     11

    9   2018-04-01  3     12
   10   2018-04-02  3     12
   11   2018-04-03  3     12
   12   2018-04-04  3     12
   13   2018-04-05  3     12
我正在尝试编写一个搜索函数来搜索可用的房间。 例如,当从2018-04-02到2018-04-04进行搜索时,所需输出为:

用户级:(用于构建主结果记录集)

房间级别(每位用户):

我在查询时遇到了几个问题:

select * from rooms_available where date between '2018-04-02' AND '2018-04-04'
还将从用户2返回记录,这是错误的,因为日期范围缺失2018-04-03。 同:

select * from rooms_available where (date='2018-04-02' OR date='2018-04-03' OR date='2018-04-04')

因此,查询需要考虑完整日期范围的天数/记录量,即3。我试过类似的方法

count(*)
拥有
,但它没有按预期工作

有什么办法解决吗?
谢谢

我想每个用户的房间都需要这样的服务:

user  room_id
-------------
1     10
1     20
3     12
select user, room_id
from rooms_available
where date between '2018-04-02' AND '2018-04-04'
group by user, room_id
having count(*) = 3;  -- this is the number of days in the range

要获得第一个结果,只需将其用作子查询并再次聚合。

我想您希望每个用户的房间都有这样的结果:

user  room_id
-------------
1     10
1     20
3     12
select user, room_id
from rooms_available
where date between '2018-04-02' AND '2018-04-04'
group by user, room_id
having count(*) = 3;  -- this is the number of days in the range

要获得第一个结果,只需将其用作子查询并再次聚合。

为什么用户2不出现在结果集中?我想,在这个日期范围内,他有一间可用的房间。数据是每个房间的-正如我所引用的,我只想要在整个日期范围内可用的房间。为什么用户2不出现在您的结果集中?我想,在这个日期范围内,他有一间可用的房间。数据是每个房间的-正如我引用的,我只想要在整个日期范围内可用的房间。这将解释预期结果集+1。这将解释预期结果集+1。