[英]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.