这个问题与前一个问题有关。您可以查看我的第一篇帖子here
我试图从用户表中提取数据,我需要朋友的朋友,那些距选定用户两步但未直接连接到所选用户的人用户
我尝试了这个查询:
select
u.*
from user u
inner join friend f
on u.user_id = f.friend_id
inner join friend ff
on f.user_id = ff.friend_id
where ff.user_id = {$user_id} AND u.user_id <> {$user_id};
我不知道如何吸引未直接连接到所选用户的用户。我得到了当前用户朋友的所有朋友,但我也直接与当前用户交朋友。
答案 0 :(得分:1)
你只需要排除那些直接与朋友在一起的人以及朋友的朋友。我已经重新安排了表别名,所以它更清楚(对我来说,无论如何)正在检索的内容:
SELECT
u.*
FROM
user u
INNER JOIN friend ff ON u.user_id = ff.friend_id
INNER JOIN friend f ON ff.user_id = f.friend_id
WHERE
f.user_id = {$user_id}
AND ff.friend_id NOT IN
(SELECT friend_id FROM friend WHERE user_id = {$user_id})
它还消除了排除被查询用户ID的需要。
答案 1 :(得分:0)
你走在正确的轨道上。您需要添加一个where条件,排除那些直接相关的条件:
select u.*
from user u
inner join friend f on u.user_id = f.friend_id
inner join friend ff on f.user_id = ff.friend_id
where ff.user_id = {$user_id} AND u.user_id <> {$user_id};
AND not exists
(select f2.friend_id
from friend f2
where f2.friend_id = ff.friend_id
and u.user_id = f2.user_id)
我添加到您的查询中的额外not exists
子句验证了第二级朋友也不是第一级朋友。
答案 2 :(得分:0)
我使用非相关子查询,该子查询检索<div class="names-container">
<ul>
<li ng-repeat="name in vm.namesCollection">
<span>{{ ::name.first }}</span>
<span>{{ ::name.second }}</span>
</li>
</ul>
</div>
的直接友谊的ID,并从最终结果中排除这些用户:
{$user_id}