【MySQL】设置好友关系(关注、粉丝、互关)的数据库设计
主键 | 关注者id | 被关注者id |
1 | 1 | 2 |
2 | 1 | 3 |
3 | 2 | 1 |
4 | 2 | 3 |
5 | 3 | 1 |
6 | 3 | 4 |
7 | 4 | 3 |
8 | 5 | 6 |
9 | 7 | 8 |
先建一张好友关系表
CREATE TABLE IF NOT EXISTS `follower` ( `id` int(6) unsigned NOT NULL, `user_id` varchar(200) NOT NULL, `follower_id` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; INSERT INTO `follower` (`id`, `user_id`, `follower_id`) VALUES ('1', '1', '2'), ('2', '1', '3'), ('3', '2', '1'), ('4', '2', '3'), ('5', '3', '1'), ('6', '3', '4'), ('7', '4', '3'), ('8', '5', '6'), ('9', '7', '8');
我关注的人
select * from follower where user_id = '1'
关注我的人
select * from follower where follower_id = '1'
跟我互关的人
select a.user_id from follower as a inner join follower as b on a.follower_id = '1' and b.follower_id = '1'
但是运行上方代码,会有重复数据出现;
跟我互关的人去重
select a.* from ( select a.user_id from follower as a inner join follower as b on a.follower_id = '1' and b.follower_id = '1' ) a group by a.user_id;
判断两人关系(互关)
select 1 from follower where user_id = '1' and follower_id = '2' union all select 2 from follower where user_id = '2' and follower_id = '1'
这里会返回一个List<Integer> 数组,有四种情况
- 空数组 A,B 之前无任何关系
- [1,2] "1" 和 "2"相互关注
- [1] "1" 关注了 "2"
- [2] "2" 关注了 "1"
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期