San*_*uss 9 php mysql sql select
并感谢您花时间尝试帮助我.
我目前正在使用CodeIgniter,如果它可能与你的答案有关;).
我在酒店网站,试图找出如何预订房间.
我希望用户选择一个可用服务列表并返回它们,一个包含这些服务的房间列表(所有这些服务),然后是一个包含至少一个服务的列表.通过这种方式,我将向他们展示符合他们所有需求的房间列表,以及一个可能做到这一点的房间,但没有一切.
这是我如何为我的房间存储我的服务(事实上这可能是我的问题...)
Table "services_rooms"
id_services_rooms | id_room | id_service
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
5 | 1 | 5
11 | 2 | 2
12 | 2 | 3
... | ... | ...
Run Code Online (Sandbox Code Playgroud)
如何设置我的SQL来询问我的服务器给我所有包含服务1,2和3的房间,因此,只有我的"id_room"1应该回来?
我尝试过做一些连接/ group_bys,但我得到的最多的是例如,3排回来说:
Return rows :
ID_ROOM 1 | ID_SERVICE 1
ID_ROOM 1 | ID_SERVICE 2
ID_ROOM 1 | ID_SERVICE 3
Run Code Online (Sandbox Code Playgroud)
另一种看待它的方式是:我想问我的服务器哪些房间包含所有这些服务:1,2,3
它会回答:ID_ROOM 1.
我已经看到了其他几个关于合并的问题,但是不能完全解决我的问题.
再次感谢.
Joh*_*Woo 11
这称为关系部门.
SELECT id_room
FROM services_rooms
WHERE id_service IN (1,2,3)
GROUP BY id_room
HAVING COUNT(*) = 3
Run Code Online (Sandbox Code Playgroud)
如果没有对id_service
ech 强制执行唯一约束id_room
,DISTINCT
则需要.
SELECT id_room
FROM services_rooms
WHERE id_service IN (1,2,3)
GROUP BY id_room
HAVING COUNT(DISTINCT id_service) = 3
Run Code Online (Sandbox Code Playgroud)
您的问题的答案将返回至少具有一项服务的所有房间.查询是:
SELECT id_room, count(*) as NumServices
FROM services_rooms
WHERE id_service IN (1,2,3)
GROUP BY id_room
HAVING COUNT(*) > 0
order by count(*) desc
Run Code Online (Sandbox Code Playgroud)