php - 检查n个用户是否在同一个房间

标签 php mysql relational-division

我有一个 user_to_room 表

roomID | userID 

我使用这个查询来获取房间 ID(取决于 n 个用户 ID)

SELECT   roomID
FROM     user_to_room
WHERE    userID IN (2,5)
GROUP BY roomID
HAVING   COUNT(DISTINCT userID)=2

演示无效:http://www.sqlfiddle.com/#!3/00b4a/1/0

(取自https://stackoverflow.com/a/16511691/1405318)

但此查询还会返回这两个用户所在的房间以及另一个随机用户所在的房间。我需要一个只返回给定用户 (2,3) 所在房间的查询。

一个可行的解决方案是

SELECT DISTINCT roomID
FROM   user_to_room AS x2
WHERE  x2.roomID NOT IN(SELECT DISTINCT roomID 
                     FROM   user_to_room
                     WHERE  roomID IN(SELECT DISTINCT roomID
                                      FROM   user_to_room
                                      WHERE  userID IN ( 5, 2 )
                                      GROUP  BY roomID
                                      HAVING Count(DISTINCT userID) = 2)
                            AND userID NOT IN( 2, 5 ))
AND roomID IN(SELECT DISTINCT roomID
                                      FROM   user_to_room
                                      WHERE  userID IN ( 5, 2 )
                                      GROUP  BY roomID
                                      HAVING Count(DISTINCT userID) = 2)

工作演示:http://www.sqlfiddle.com/#!3/00b4a/2/0

但我认为这太过分了。有什么想法吗?

最佳答案

您应该能够使用与第一个查询相同的查询,但添加一个过滤器以排除用户在 2、5 之外的任何房间:

select roomId
from user_to_room
where userid in (2,5)
  and roomid not in (select roomid
                     from user_to_room
                     where userid not in (2, 5))
group by roomId
having count(distinct userid) = 2;

参见 SQL Fiddle with Demo

关于php - 检查n个用户是否在同一个房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16824747/

相关文章:

php - 查询条件以从表单中插入数据

php - CKEditor 正在转义 html 元素

mysql - 复合类(class)先决条件(a、b、c 和 x 或 y 以及 z 样式中的一个或多个)

mysql - 在 Laravel 5.2 中如何从 html 表单获取输入并将其存储在数据库中?

sql - 选择与列表中所有项目匹配的行组

sql - INNER JOIN 中的多个条件

php - WooCommerce : add custom fields to product variations

php - 如果我只有服务器 A 的 FTP 和 MySQL 用户/密码,我可以将 MySQL 数据库从服务器 A 移动到服务器 B 吗?

mysql - Doctrine 不会使用 GROUP BY 自动加载连接关系

mysql - 如何获得关联实体对象 doctrine2