查询用户组隐藏搜索结果

时间:2014-04-26 10:00:30

标签: php mysql

您好我正在尝试更改某些代码,以便具有特定组ID的用户不会在搜索结果中显示。

目前代码

$query = 'SELECT distinct b.'.$db->nameQuote('id')
        .' FROM '.$db->nameQuote('#__users').' b';

我正在尝试添加类似以下内容但无法使其正常工作。

select * from '.$db->quoteName('#__users').' where id not in (select user_id from #__user_usergroup_map where group_id = 8)

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试

select * from users u 
where 
not exists
(
  select 1
  from user_group ug
  where 
  u.id = ug.iduser
  AND ug.group_id = 8 
)

您需要根据需要更改上述查询中的表名和字段名称。

<强> DEMO

答案 1 :(得分:0)

有三种方法可以做到这一点。

方法1:加入

加入usergroup_map表,然后选择具有不同group_id的所有行:

SELECT <comma separated fields> from USERS u 
LEFT JOIN USERGROUPS ug ON u.user_id = ug.user_id
WHERE ug.group_id != :group_id
GROUP BY u.user_id

然后 - &gt;将任何数字绑定到:group_id。

请注意,只有当他们在另一个群组中时,上述语句才会返回分配给:group_id的用户。 (一对多关系)

方法2:选择

其他用户已经建议。

方法3:加入&amp;子选择

第3个,最后一个选项是在join语句中使用子查询,这在优化方面往往是最快的解决方案。当然,查询时间可能因您使用的引擎而异,但值得一试。

SELECT <comma separated fields>
FROM USERS u
INNER JOIN (
    SELECT g.user_id
    FROM USERGROUPS g 
    WHERE g.group_id != :group_id
  ) ug ON ug.user_id = u.user_id

-

在本回答中,我假设您已使用外键正确配置了数据库。