您好我正在尝试更改某些代码,以便具有特定组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)
任何帮助都将不胜感激。
感谢。
答案 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
-
在本回答中,我假设您已使用外键正确配置了数据库。