You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于users与user_followings表关联查询粉丝及关注列表的技术咨询

实现特定用户的粉丝与关注对象查询

嘿,这个需求我熟,咱们一步步来搞定它!你需要查询某个特定用户的所有粉丝(也就是关注他的人)和他关注的对象的信息,结合JOIN和LEFT JOIN就能轻松实现,甚至可以加个标记字段区分这两类用户,让结果更清晰。

核心思路

咱们分两部分查询,再把结果合并:

  • 找粉丝:user_followings表中following_user_id等于目标用户ID的记录,对应的follower_user_id就是粉丝,关联users表拿用户信息。
  • 找关注对象:user_followings表中follower_user_id等于目标用户ID的记录,对应的following_user_id就是他关注的人,同样关联users表。

完整SQL代码(带身份标记)

假设你要查询的目标用户ID是@target_user_id(实际使用时替换成具体ID,比如123,或者用参数绑定更安全):

-- 第一部分:查询该用户的粉丝(关注者)
SELECT 
    u.id,
    u.name,
    u.email,
    '粉丝' AS relationship_type -- 也可以用英文'follower'
FROM 
    users u
JOIN 
    user_followings uf ON u.id = uf.follower_user_id
WHERE 
    uf.following_user_id = @target_user_id

UNION ALL

-- 第二部分:查询该用户关注的对象
SELECT 
    u.id,
    u.name,
    u.email,
    '关注对象' AS relationship_type -- 也可以用英文'following'
FROM 
    users u
JOIN 
    user_followings uf ON u.id = uf.following_user_id
WHERE 
    uf.follower_user_id = @target_user_id;

用LEFT JOIN兼容异常数据

如果担心user_followings里存在无效的用户ID(比如用户已经被删除),可以换成LEFT JOIN来过滤掉无效记录,确保结果都是有效的用户信息:

-- 兼容无效用户ID的版本
SELECT 
    u.id,
    u.name,
    u.email,
    '粉丝' AS relationship_type
FROM 
    user_followings uf
LEFT JOIN 
    users u ON u.id = uf.follower_user_id
WHERE 
    uf.following_user_id = @target_user_id
    AND u.id IS NOT NULL -- 只保留存在的用户

UNION ALL

SELECT 
    u.id,
    u.name,
    u.email,
    '关注对象' AS relationship_type
FROM 
    user_followings uf
LEFT JOIN 
    users u ON u.id = uf.following_user_id
WHERE 
    uf.follower_user_id = @target_user_id
    AND u.id IS NOT NULL;

小提示

  • 用UNION ALL会保留所有记录,包括互关的用户(会出现两次,分别标记为粉丝和关注对象);如果只需要唯一的用户列表,换成UNION即可自动去重。
  • 实际项目中建议用参数绑定(比如@target_user_id)代替直接写死ID,避免SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:20:38