【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"

 

posted @   Mr·Xu  阅读(1446)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
点击右上角即可分享
微信分享提示