选择公共交互mysql

选择公共交互mysql,mysql,sql,Mysql,Sql,我有三张桌子: [user] id | name | level 10 | John | 1 11 | Josh | 2 12 | Mary | 3 我想要的是选择可以与房间交互的楼层 如果我检查房间1,答案应该是级别1和2(因为John是级别1,他只能与级别2互动),即使Josh作为级别2可以与级别3互动 如果我查看房间3,因为只有Josh在那里,答案应该是12和3 如果我选择房间2,答案应该是级别2和级别3 基本上我想要的是一种为房间里的成员选择公共交互级别的方法

我有三张桌子:

[user]
id | name  |  level
10 | John  |   1
11 | Josh  |   2
12 | Mary  |   3
我想要的是选择可以与房间交互的楼层

  • 如果我检查房间1,答案应该是级别1和2(因为John是级别1,他只能与级别2互动),即使Josh作为级别2可以与级别3互动

  • 如果我查看房间3,因为只有Josh在那里,答案应该是12和3

  • 如果我选择房间2,答案应该是级别2和级别3

基本上我想要的是一种为房间里的成员选择公共交互级别的方法


检查以下表格/数据集:

您没有提到您正在使用的MySQL版本,因此我假设它是一个现代版本。在MySQL 8.x中,您可以使用CTE

例如:

with
x as (
  select u.name, i.interact_with as level
  from room r
  join user u on u.id = r.user_id
  join level_interation i on i.level = u.level
  where r.room_id = 1 -- this is the starting room
)
select level
from x 
group by level
having count(distinct name) = (
  select count(distinct name) from x
)

您没有提到您使用的MySQL版本,所以我假设它是一个现代版本。在MySQL 8.x中,您可以使用CTE

例如:

with
x as (
  select u.name, i.interact_with as level
  from room r
  join user u on u.id = r.user_id
  join level_interation i on i.level = u.level
  where r.room_id = 1 -- this is the starting room
)
select level
from x 
group by level
having count(distinct name) = (
  select count(distinct name) from x
)

加入表格并按li分组。在
HAVING
子句中使用条件与
交互:

select li.interact_with
from room r
inner join user u on u.id = r.user_id
inner join level_interaction li on li.level = u.level
where r.room_id = 1
group by li.interact_with
having count(*) = (select count(user_id) from room where room_id = 1);
请参阅。
结果(对于
房间id=1
):


加入表格并按li分组。在
HAVING
子句中使用条件与
交互:

select li.interact_with
from room r
inner join user u on u.id = r.user_id
inner join level_interaction li on li.level = u.level
where r.room_id = 1
group by li.interact_with
having count(*) = (select count(user_id) from room where room_id = 1);
请参阅。
结果(对于
房间id=1
):


如果你从1号房间开始,那么3号房间应该包括在内,因为乔希可以和3号房间互动,但你说不应该。你能详细说明一下吗?嗨,1号房间的主人,如果玛丽(3级)加入,约翰将无法与她互动。基本上,房间里的每个人都应该能够相互交流。这有意义吗?感谢您添加到问题中的表/数据集在结构上与此处的解释有相当大的差异。它现在应该更新,与问题上的名称完全匹配。谢谢,到目前为止你都试了些什么?你被困在哪里?如果你从1号房间开始,那么3号房间应该包括在内,因为乔希可以和3号房间互动,但你说不应该。你能详细说明一下吗?嗨,1号房间的主人,如果玛丽(3级)加入,约翰将无法与她互动。基本上,房间里的每个人都应该能够相互交流。这有意义吗?感谢您添加到问题中的表/数据集在结构上与此处的解释有相当大的差异。它现在应该更新,与问题上的名称完全匹配。谢谢,到目前为止你都试了些什么?你被困在哪里了?你能在mysql 5上做到吗?非常感谢。你能在mysql 5上完成吗?非常感谢。谢谢!成功了!现在我将试着理解逻辑:)谢谢!谢谢!成功了!现在我将试着理解逻辑:)谢谢!
> | interact_with |
> | ------------: |
> |             1 |
> |             2 |