我有一张用户表,其中所有信息都是一对一的关系...
users table
------------------------
id | name
------------------------
800 | Bob Smith
801 | Jane Doe
802 | Fred Flintstone
803 | Barney Rubble
804 | Marge Simpson
我还有另一个多对一关系表,其中包含所有用户到他们所属的组的用户组映射
user_usergroup_map table
------------------------
user_id | group_id
------------------------
800 | 16
800 | 27
801 | 25
801 | 27
802 | 17
802 | 19
802 | 22
802 | 25
803 | 25
803 | 27
804 | 15
我正在尝试生成属于2个不同组的不同用户的数组。同时,我试图将所有内容都保留在单个数组中(我将使用该数组作为分页参考)。
我已经能够通过JOIN语句成功查询两个表...
$group_id1 = 25;
$group_id2 = 27;
$query = SELECT DISTINCT name, id FROM users INNER JOIN user_usergroup_map on user_usergroup_map.user_id=users.id WHERE group_id IN('$group_id1', '$group_id2');
但是,有了这个,我得到了属于EITHER group_id 15或group_id 27的用户的独特列表,而不是属于这两个组的用户。我知道我盯着这个眼睛已经太久了,我错过了一些简单化的逻辑元素,但是我一生都看不到它。如果外面有人可以阐明我可能做错了什么,我将非常感谢。
最佳答案
假设您在user_usergroup_map
表上有一个约束,以致给定的用户不能两次分配给同一group_id
,则可以执行以下操作:
Select ...
From users
Where id In (
Select user_id
From user_usergroup_map
Where group_id In(25,27)
Group By user_id
Having Count(*) = 2
)
关于php - MySQL多个WHERE子句到同一列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16680558/