我有一张用户表,其中所有信息都是一对一的关系...

    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/

10-12 12:43
查看更多