关于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
相关产品推荐
相关产品推荐

