[英]MySQL LEFT JOIN Multiple Conditions
我有两个表:A 和 B 由“group_id”链接。
我正在使用的 2 个变量: $keyword, $_SESSION['user_id']
一种
group_id
关键词
乙
ID
group_id
用户身份
我希望能够根据关键字搜索选择该用户不在的所有组。
因此,目标是选择 A 中的所有行,其中 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
但是,它不会找到任何行(匹配项),除非我删除AND b.user_id!=$_SESSION{['user_id']}
在这种情况下,它还将包含用户已经在的组 - 这不是我想要的。
任何帮助,将不胜感激! 谢谢
只需将额外的条件移动到 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
正确答案很简单:
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%'
在这里,我们正在检查user_id = 4
(会话中的用户 ID)。 由于我们在连接条件中有它,它将为表 b 中与条件不匹配的任何行返回空值 - 即 user_id 不在的任何组。
从那里,我们需要做的就是过滤空值,我们拥有您的用户不在的所有组。
SELECT * FROM a WHERE a.group_id IN
(SELECT group_id FROM b WHERE b.user_id!=$_SESSION{'[user_id']} AND b.group_id = a.group_id)
WHERE a.keyword LIKE '%".$keyword."%';
以上答案都是正确的。 实现这一目标的另一种方法是;
SELECT a.group_id
FROM a
LEFT JOIN b ON (a.group_id, b.user_id) = (b.group_id, 4)
where b.user_id is null
and a.keyword like '%keyword%'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.