Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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 - Fatal编程技术网

使用mysql获得朋友的朋友

使用mysql获得朋友的朋友,mysql,Mysql,我正在做一个查询,其中我想得到朋友的朋友,但问题是,如果我的朋友也是朋友,它也建议他们的ID。假设用户id是1,他有两个朋友2和3,2个是4和3的朋友,3个是5和2的朋友,那么它建议我4,5,它应该这样做,但也建议2,3,因为他们都是朋友,而且他们也是我的朋友,哪一个是错误的,应该只建议4,5 我的问题是 SELECT fr.friend_id FROM friend_list fl ,friend_list fr WHERE fl.login_id='27' AND fl.status=

我正在做一个查询,其中我想得到朋友的朋友,但问题是,如果我的朋友也是朋友,它也建议他们的ID。假设用户id是
1
,他有两个朋友
2
3
,2个是
4
3
的朋友,3个是
5
2
的朋友,那么它建议我
4,5
,它应该这样做,但也建议
2,3
,因为他们都是朋友,而且他们也是我的朋友,哪一个是错误的,应该只建议
4,5

我的问题是

SELECT fr.friend_id 
FROM friend_list fl ,friend_list fr 
WHERE fl.login_id='27' 
AND fl.status='3' 
AND fl.friend_id=fr.login_id 
AND fr.status='3' 
AND fl.login_id!=fr.friend_id

一种方法是在不在谓词中的位置添加

SELECT fr.friend_id 
FROM friend_list fl 
INNER JOIN friend_list fr  ON fl.friend_id = fr.login_id
                          AND fl.status = fr.status
WHERE fl.login_id = 27 AND fl.status = '3'
  AND fr.friend_id NOT IN(SELECT friend_id
                          FROM friend_list
                          WHERE login_id = 27 AND friend_id IS NOT NULL)
NOT IN
后面的子查询将选择您传递的朋友id的朋友。排除他们

对于您在问题中给出的示例,这只会给您4,5分:

| FRIEND_ID |
|-----------|
|         4 |
|         5 |

注意:我使用了显式的
JOIN
语法,而不是您使用的旧
JOIN
语法,它应该是相同的,但建议使用新语法。

一些示例数据和表结构肯定有助于回答这个问题