llegue a tu tema buscando casi lo mismo, y ya e que el post tiene mil años pero alomejor a alguien le sirve, porque la verdad no encontre informacion por niun lado.
poniendo de supuesto la sig tabla
Código:
room_id user_id
------- ---------
1 2
1 4
2 1
2 4
1 5
para saber el id de la sala de los usuarios 1 y 4:
Código:
SELECT ur1.room_id FROM user_has_room ur1
INNER JOIN user_has_room ur2 ON ur1.room_id = ur2.room_id
WHERE ur1.user_id = 1 AND ur2.user_id = 4
-- WHERE ur1.user_id = 4 AND ur2.user_id = 1 -- funciona de cualquier orden
GROUP BY ur1.room_id
HAVING (SELECT COUNT(1) AS room_count1 FROM user_has_room WHERE room_id = ur1.room_id) = 2;
para mas usuarios se agrega un JOIN por cada usuario, un AND en el where y la cantidad en el HAVING del final
Código:
SELECT ur1.room_id FROM user_has_room ur1
INNER JOIN user_has_room ur2 ON ur1.room_id = ur2.room_id
INNER JOIN user_has_room ur3 ON ur1.room_id = ur3.room_id
WHERE ur1.user_id = 4 AND ur2.user_id = 5 AND ur3.user_id = 2
GROUP BY ur1.room_id
HAVING (SELECT COUNT(1) AS room_count1 FROM user_has_room WHERE room_id = ur1.room_id) = 3
obiamente con una combinacion que no corresponda no devolvera resultados.
es la unica forma en la que se me ocurrio solucionarlo, se que es algo complejo pero funciona
saludos