繁体   English   中英

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

[英]MySQL: complex query for hotel reservation service

这是我的数据:

桌子:rooms_available

    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进行搜索时,所需的输出将是:

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

user  rooms_available
---------------------
1     2
3     1

房间级别(每位用户):

user  room_id
-------------
1     10
1     20
3     12

我的查询遇到了几个问题:

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(*)HAVING但未按预期工作。

任何想法如何解决呢? 谢谢

我认为您希望每个用户的房间都这样:

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

要获得您的第一个结果,只需将其用作子查询并再次进行汇总即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM