嗨,我正在尝试更改一些代码,以便具有特定组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
)
您需要根据需要更改上面查询中的表名和字段名。
DEMO
方法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_id。
请记住,只有当用户也在另一个组中时,上面的语句才会返回分配给:group_id的用户。(一对多关系)。
方法2:再选择
已经被其他用户建议。
方法3:加入&再选择
第三个也是最后一个选项是在联接语句中使用子查询,这往往是优化方面最快的解决方案。当然,查询时间可能会因使用的引擎而异,但值得一试。
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
--
在这个答案中,我假设您已经使用外键正确地配置了数据库。