Php 选择用户角色1和2 SQL查询的位置

Php 选择用户角色1和2 SQL查询的位置,php,mysql,sql,Php,Mysql,Sql,下面是我现在得到的,它不能正常工作,因为它检查一行中的两个不同值 SELECT users.* FROM users INNER JOIN roles_users ru ON users.id = ru.user_id WHERE ru.role_id = 1 AND ru.role_id = 2 我想选择角色中有两行的所有用户。一行角色id应该有一个,第二行角色id应该有两个 因此,选择角色中有两行的所有用户,其中一行具有role\u id=1,另一行具有role\u id=2 上面的查

下面是我现在得到的,它不能正常工作,因为它检查一行中的两个不同值

SELECT users.* 
FROM users INNER JOIN roles_users ru ON users.id = ru.user_id
WHERE ru.role_id = 1 AND ru.role_id = 2 
我想选择角色中有两行的所有用户。一行角色id应该有一个,第二行角色id应该有两个

因此,选择角色中有两行的所有用户,其中一行具有
role\u id=1
,另一行具有
role\u id=2


上面的查询选择了所有在角色中有一行的用户(用户先有一行,然后有两行),这就是为什么我没有得到任何结果,它也不起作用。那么我如何才能做到这一点呢?

为什么不加入角色用户两次呢?阿拉:

SELECT users.id
FROM users INNER JOIN roles_users ON users.id = roles_users.user_id 
WHERE roles_users.role_id IN (1, 2)
GROUP BY users.id
HAVING COUNT(*) = 2
SELECT users.* FROM users 
INNER JOIN roles_users ru1 ON users.id = ru1.role_id AND ru1.role_id = 1 
INNER JOIN roles_users ru2 ON users.id = ru2.role_id AND ru2.role_id = 2 
您需要获得具有所需角色的用户的(不同的)列表。请尝试以下方法:

SELECT users.{column_list}
FROM users as a
JOIN (SELECT user_id
      FROM roles_users
      WHERE role_id IN (1, 2)
      GROUP BY user_id
      HAVING COUNT(DISTINCT role_id) = 2) required_role
  ON required_role.user_id = users.id

你可能有一个更大的问题,那就是你试图获得
users.id=ru.role\u id
-其中userid等于他们的角色?哇,这是错误的,当然我应该是ru.user\u id..出于好奇,如果有人决定“拥有一个
role\u id
=3是等效的”?那么您想查找角色为1&2或3的所有用户?这会变得更难看,但我可能会在结果集上执行两次查询和一个联合,然后执行一个GROUP BY以消除重复项(例如,拥有1、2和3的人)。HAVING基本上是一个where子句,在GROUP BY聚合数据之后运行(where子句在聚合之前生效)。@Karem
HAVING COUNT(*)=2确保只选择了同时具有1和2的
id`s(假设没有重复角色)。