Php 查询用户组隐藏搜索结果

Php 查询用户组隐藏搜索结果,php,mysql,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_i

嗨,我正在尝试更改一些代码,以便具有特定组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)
任何帮助都将不胜感激

谢谢。

这是您可以尝试的方法

select * from users u 
where 
not exists
(
  select 1
  from user_group ug
  where 
  u.id = ug.iduser
  AND ug.group_id = 8 
)
您需要根据需要更改上述查询中的表名和字段名


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

方法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
然后->将任意号码绑定到:group\u id

请记住,上述语句将仅在用户也在其他组中时返回分配给:group_id的用户。一对多关系

方法2:子选择

其他用户已经建议了

方法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
-

在这个答案中,我假设您已经用外键正确地配置了数据库