You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何编写MySQL好友关系SQL?获取用户已确认好友列表

当然可行!

首先咱们得明确已确认好友的判定逻辑:两个人互为好友,意味着在friends表中同时存在两条记录——A添加B为好友,且B也添加A为好友。

不过先提个小细节:你给出的friends表中,John(users.id=1)和Jerry(users.id=2)的对应数据写的是(1,2) (2,2),这里第二条记录的friendid=2是Jerry加自己,这显然不符合实际的好友确认逻辑,应该是笔误,正确的应该是(2,1)(Jerry添加John为好友),这样才能构成双向确认的好友关系。

基于修正后的逻辑,我们可以用以下SQL查询John的已确认好友:

SELECT u.id, u.username
FROM friends f1
-- 自连接找到双向确认的好友记录
JOIN friends f2 
  ON f1.friendid = f2.userid 
  AND f2.friendid = f1.userid
-- 关联users表获取好友的用户名
JOIN users u 
  ON u.id = f1.friendid
-- 筛选John发起的好友记录(先通过users表找到John的id)
WHERE f1.userid = (SELECT id FROM users WHERE username = 'John');

这个查询的逻辑拆解:

  • 先定位John发起的所有好友请求记录(通过f1表)
  • 通过自连接f2表,筛选出那些同时向John发起好友请求的用户——这就是双向确认的好友
  • 最后关联users表,拿到这些好友的id和用户名

如果friends表中的数据修正为正确的双向记录(John和Jerry各添加对方一次),执行这个SQL就能得到你期望的结果:

(1, Jerry)

内容的提问来源于stack exchange,提问作者yarek

火山引擎 最新活动