我有两个表:A和B由"group_id"链接.
我正在使用的2个变量:$keyword, $_SESSION['user_id']
一个
GROUP_ID
关键字
B
id
group_id
user_id
我希望能够根据关键字搜索选择该用户不在的所有组.
因此,目标是选择A WHERE中的所有行user_id!= {$ _ SESSION ['user_id'}用于B中对应的group_id,并且像关键字一样.
这是我试过的:
SELECT a.*
FROM a
LEFT JOIN b ON a.group_id=b.group_id
WHERE a.keyword LIKE '%".$keyword."%'
AND b.user_id!=$_SESSION{['user_id']}
GROUP BY group_id
Run Code Online (Sandbox Code Playgroud)
但是,它没有找到任何行(匹配),除非我删除AND b.user_id!=$_SESSION{['user_id']}
在这种情况下它还将包括用户已经在的组 - 这不是我想要的.
任何帮助,将不胜感激!谢谢
Bry*_*yan 40
只需将额外条件移动到JOIN ON条件中,这样就不需要存在b来返回结果
SELECT a.* FROM a
LEFT JOIN b ON a.group_id=b.group_id AND b.user_id!=$_SESSION{['user_id']}
WHERE a.keyword LIKE '%".$keyword."%'
GROUP BY group_id
Run Code Online (Sandbox Code Playgroud)
pal*_*la_ 12
正确答案很简单:
SELECT a.group_id
FROM a
LEFT JOIN b ON a.group_id=b.group_id and b.user_id = 4
where b.user_id is null
and a.keyword like '%keyword%'
Run Code Online (Sandbox Code Playgroud)
我们在这里检查user_id = 4
(您的会话中的用户ID).由于我们在连接条件中有它,它将为表b中与条件不匹配的任何行返回空值 - 即,user_id不在的任何组.
从那里,我们需要做的就是过滤空值,并且我们拥有您的用户不在的所有组.