【MySQL】设置好友关系(关注、粉丝、互关)的数据库设计

主键关注者id被关注者id
112
213
321
423
531
634
743
856
978

  

先建一张好友关系表

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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值