当前位置: 首页 > 面试题库 >

“朋友的朋友” SQL查询

李振国
2023-03-14
问题内容

我正在尝试从用户表中提取数据,并且需要“朋友之友”,这些人与所选用户相距两步 但未直接连接到所选用户

我尝试了以下查询:

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};

我不知道如何拉未直接连接到所选用户的用户。我得到了当前用户的朋友的所有朋友,但是我 得到了当前用户的直接朋友。

在此处输入图片说明


问题答案:

您只需要排除既是直接朋友又是朋友的人。我已经重新排列了表别名,这样(无论如何对我来说)就更清楚了要检索的内容:

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的需要。



 类似资料:
  • 为了了解在朋友关系中使用Neo4J的优势,我在MySQL数据库上创建了一个Persons表(“Persons”,20900个数据集): 和一张关系表(“友谊”,每个人有50到100个朋友): 因此,大约有120万人的关系。 现在我想查看id=1的人的朋友的朋友的朋友的朋友,因此我创建了一个如下查询: 用户ID 1的查询用了大约30秒 在Neo4J中,我为每个人创建了一个节点(20900个节点)和一

  • 问题内容: 我正在研究“可能的朋友”功能。在这里,我需要向不是我的朋友的所有朋友显示所有朋友,也不要发送给我或没有我的待处理请求 对于每一次友谊,我都会做两个记录。假设用户1和2成为朋友…我要在表中做一个记录,再做一个。 当第一个用户发送请求时,将状态设置为0,而当朋友接受请求时,我将两行都更新为1 如何根据朋友的朋友进行建议“可能的朋友”的sql查询? 问题答案: 在这里,您…简单加入

  • 问题内容: 我有一个类似于myspace / facebook的社交网络。在我的代码中,您不是一个人的朋友,还是不是一个朋友,因此,我显示了您与之成为朋友的人的所有操作(在此帖子中,我将这些操作单独称为公告帖子,以使其更易于可视化。 因此,您每当有人发布公告时,都会向在那里的任何朋友显示。 在mysql中,您可以通过执行以下操作来获得个人朋友列表, 我想知道像facebook之类的网站如何显示您的

  • 可通过PlayStation®Network与远方的用户成为朋友,或查看朋友状态的应用程序。能在(派对)或(群信息)等应用程序中,与朋友尽情交流。在个人信息画面或游戏的交流区中亦可查看朋友的活动或撰写留言。 朋友的LiveArea™ 成为朋友 查看个人信息

  • 问题内容: 如何使用Twitter4J获取朋友或关注者的朋友列表? 使用,我只能检索已通过身份验证的当前用户的朋友/关注者列表。我想要的是获取关注者的朋友列表或经过身份验证的用户的朋友列表。 问题答案:

  • 发送加为朋友请求给想成为朋友的对象。若对方同意即可成为朋友,并显示于朋友列表中。 若要使用此功能,需使用PS Vita注册PlayStation®Network。 A ) 个人信息 B ) 目前的加为朋友请求数量 C ) 朋友信息 D ) 正在确认加为朋友请求 若成为朋友,即可在以下应用程序交换信息及畅享交流乐趣。 (派对)*1 (near)*1 (群信息) (奖杯) 游戏*2 *1 仅限朋友使用