Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL左连接多个条件_Mysql_Join - Fatal编程技术网

MySQL左连接多个条件

MySQL左连接多个条件,mysql,join,Mysql,Join,我有两个表:A和B通过“组id”链接 我使用的两个变量:$关键字,$\u会话['user\u id'] A 组id 关键词 B id 组id 用户id 我希望能够根据关键字搜索选择此用户不在的所有组 因此,我们的目标是选择用户id所在位置的所有行={$\u SESSION['user\u id'}对应于B中的组\u id,类似于关键字 这就是我所尝试的: SELECT a.* FROM a LEFT JOIN b ON a.group_id=b.group_id WHERE a.keywo

我有两个表:A和B通过“组id”链接
我使用的两个变量:
$关键字,$\u会话['user\u id']

A
组id
关键词

B
id
组id
用户id

我希望能够根据关键字搜索选择此用户不在的所有组

因此,我们的目标是选择用户id所在位置的所有行={$\u SESSION['user\u id'}对应于B中的组\u 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
但是,除非我删除
和b.user\u id!=$\u SESSION{['user\u id']}
,否则它不会找到任何行(匹配项),在这种情况下,它还将包括用户已经在其中的组-这不是我想要的


任何帮助都将不胜感激!谢谢

只需将附加条件移动到连接条件中,这样就不需要存在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\u id=4
(会话中的用户id)。因为我们在连接条件中有它,它将为表b中与条件不匹配的任何行返回空值-即,该用户\u id不在其中的任何组

从这里开始,我们需要做的就是过滤空值,并且我们拥有您的用户不在的所有组


上述答案是正确的。实现这一点的另一种方法是

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%'

感谢您的回复,但是,这不起作用。它只返回表“a”中的所有行,包括b.user\u id等于$\u会话['user\u id'的行]。我不知道为什么,但我认为这与它是一个左连接这一事实有关?我想你已经足够接近了,知道答案:)尝试使用内部连接而不是左连接没有内部连接不起作用。如果我使用内部连接,那么它只会从表a中提取表B中具有相应组id的行。我需要它来全部提取行s在表A中,除了B中的用户id=$\u会话['user\u id'](对于该特定组id)之外。
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%'