[英]MySQL: complex query for hotel reservation service
here's my data: 这是我的数据:
table: rooms_available 桌子: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
i'm trying to write a search function for searching for available rooms. 我正在尝试编写一个搜索功能以搜索可用的房间。 for example, when searching from 2018-04-02 to 2018-04-04 the desired output would be: 例如,从2018-04-02到2018-04-04进行搜索时,所需的输出将是:
user level: (for building the main result recordset) 用户级别:(用于构建主要结果记录集)
user rooms_available
---------------------
1 2
3 1
room level (per user): 房间级别(每位用户):
user room_id
-------------
1 10
1 20
3 12
i encountered several problems with my queries: 我的查询遇到了几个问题:
select * from rooms_available where date between '2018-04-02' AND '2018-04-04'
would also return the records from user 2 which is wrong as the date range is missing 2018-04-03. 也会从用户2返回记录,这是错误的,因为日期范围缺少2018-04-03。 same as: 如同:
select * from rooms_available where (date='2018-04-02' OR date='2018-04-03' OR date='2018-04-04')
so the query needs to consider the amount of days/records for the full date range which would be 3. i've tried something like count(*)
and HAVING
but it didn't work as expected. 因此查询需要考虑整个日期范围内的天数/记录数。这将是3。我尝试了诸如count(*)
和HAVING
但未按预期工作。
any ideas how to solve it? 任何想法如何解决呢? thanks 谢谢
I think you want something like this for the rooms per user: 我认为您希望每个用户的房间都这样:
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
To get your first result, just use this as a subquery and aggregate again. 要获得您的第一个结果,只需将其用作子查询并再次进行汇总即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.