zoukankan      html  css  js  c++  java
  • 【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"

    分享链接:

    工作之余,开了一个淘宝小店,分别销售日常必备生活用品,期待您的光临!点击下图,跳转店铺首页!
  • 相关阅读:
    TURN协议(RFC5766详解)
    css布局相关:涉及到常见页面样式难点
    关于echart的x轴固定为0-24小时显示一天内的数据
    用于实现tab页签切换页面的angular路由复用策略
    Promise相关学习
    js原型链、继承、this指向等老生常谈却依然不熟的知识点——记录解析
    js中有遍历作用相关的方法详解总结
    rgb格式颜色与#000000格式颜色的转换
    input搜索框的搜索功能
    Fastapi学习总结(上)
  • 原文地址:https://www.cnblogs.com/xjf125/p/15014515.html
Copyright © 2011-2022 走看看