用MySQL实现类似微信朋友圈的屏蔽功能
设计一个类似微信朋友圈的屏蔽功能的数据库需要考虑以下几个方面:
1. 用户信息表
首先需要设计一个用户信息表,用于存储每个用户的基本信息,例如用户ID、用户名、头像等。
2. 好友关系表
接下来需要设计一个好友关系表,用于存储每个用户的好友列表。该表至少包含两个字段:好友ID和用户ID,表示用户与其好友之间的关系。
3. 动态信息表
为了实现朋友圈功能,需要设计一个动态信息表,用于存储用户发布的动态信息。该表至少包含以下字段:动态ID、用户ID、发布时间、动态内容等。
4. 屏蔽关系表
接下来需要设计一个屏蔽关系表,用于存储用户屏蔽好友的关系。该表至少包含以下字段:屏蔽ID、用户ID、好友ID、屏蔽时间等。当用户屏蔽某个好友时,系统会在屏蔽关系表中添加一条记录。
在实际应用中,可能需要对上述表进行进一步设计和优化,例如添加索引、分表等操作,以提高数据库的性能和可扩展性。
数据库结构
下面是一个简单的例子,展示了各个表的结构:
1.用户信息表
字段名 |
类型 |
描述 |
user_id |
int |
用户ID |
username |
varchar(255) |
用户名 |
avatar |
varchar(255) |
用户头像 |
2.好友关系表
字段名 |
类型 |
描述 |
friendship_id |
int |
好友关系ID |
user_id |
int |
用户ID |
friend_id |
int |
好友ID |
3.动态信息表
字段名 |
类型 |
描述 |
post_id |
int |
动态ID |
user_id |
int |
用户ID |
post_time |
datetime |
发布时间 |
post_text |
varchar(255) |
动态文本内容 |
post_images |
varchar(255) |
动态图片路径 |
post_video |
varchar(255) |
动态视频路径 |
4.屏蔽关系表
字段名 |
类型 |
描述 |
block_id |
int |
屏蔽关系ID |
user_id |
int |
用户ID |
blocked_user_id |
int |
被屏蔽的好友ID |
block_time |
datetime |
屏蔽时间 |
上述表结构仅为示例,实际应用中可能需要根据具体需求进行进一步优化和修改。
创建数据表
下面是一个简单的例子,展示了如何使用SQL语句创建上述数据表:
1.用户信息表
CREATE TABLE user_info (user_id INT NOT NULL AUTO_INCREMENT,username VARCHAR(255) NOT NULL,avatar VARCHAR(255) DEFAULT NULL,PRIMARY KEY (user_id)
);
2.好友关系表
CREATE TABLE friendship (friendship_id INT NOT NULL AUTO_INCREMENT,user_id INT NOT NULL,friend_id INT NOT NULL,PRIMARY KEY (friendship_id),FOREIGN KEY (user_id) REFERENCES user_info(user_id),FOREIGN KEY (friend_id) REFERENCES user_info(user_id)
);
3.动态信息表
CREATE TABLE post (post_id INT NOT NULL AUTO_INCREMENT,user_id INT NOT NULL,post_time DATETIME NOT NULL,post_text VARCHAR(255) DEFAULT NULL,post_images VARCHAR(255) DEFAULT NULL,post_video VARCHAR(255) DEFAULT NULL,PRIMARY KEY (post_id),FOREIGN KEY (user_id) REFERENCES user_info(user_id)
);
4.屏蔽关系表
CREATE TABLE block (block_id INT NOT NULL AUTO_INCREMENT,user_id INT NOT NULL,blocked_user_id INT NOT NULL,block_time DATETIME NOT NULL,PRIMARY KEY (block_id),FOREIGN KEY (user_id) REFERENCES user_info(user_id),FOREIGN KEY (blocked_user_id) REFERENCES user_info(user_id)
);
发布动态的过程
以下是一个示例的SQL语句,用于向动态信息表中插入一条新的动态信息。假设需要实现的功能是:当用户A发动态时,可以选择屏蔽给定的好友B,即B无法看到这条动态。
INSERT INTO post (user_id, post_time, post_text, post_images, post_video)
VALUES (A, NOW(), '这是一条动态', '图片路径', '视频路径');-- 获取新插入的动态ID
SET @post_id = LAST_INSERT_ID();-- 如果B被屏蔽,则在屏蔽关系表中插入一条记录
IF EXISTS (SELECT * FROM block WHERE user_id = A AND blocked_user_id = B
) THENINSERT INTO block (user_id, blocked_user_id, block_time)VALUES (A, B, NOW());
END IF;
查看动态的过程
以下是一个示例的SQL语句,用于查询符合条件的动态信息。假设需要实现的功能是:当用户A浏览动态信息时,只能看到没有屏蔽自己的好友所发出的动态,且结果按照动态的发布时间倒序排列。
SELECT *
FROM post
WHERE user_id IN (SELECT friend_idFROM friendshipWHERE user_id = A
) AND user_id NOT IN (SELECT blocked_user_idFROM blockWHERE user_id = A
) ORDER BY post_time DESC;
上述SQL语句中,A为当前用户的ID。查询中使用了子查询,通过查询好友关系表和屏蔽关系表,过滤出了符合条件的动态信息。
用MySQL实现类似微信朋友圈的屏蔽功能相关推荐
- iOS UITableView+FDTemplateLayoutCell 配合AutoLayout分分钟教你实现类似微信朋友圈的动态高度自适应
11.30日更新,实现了简单的微信朋友圈,点赞,评论,图片,高度自适应,下拉展开等各种效果Demo 点击打开链接 11.10更新 这种高度自适应的Label切记一定要加上这个属性 preferredM ...
- android微信朋友圈视频无法播放,微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?...
微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?最近微信更新,用户可以进行分享自己手机里的视频,这一举措受到很多人的喜欢.那么微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频 ...
- 类似微信朋友圈的mysql数据库
这段时间模仿微信朋友圈准备写个类似于论坛的小交友平台 主框架就用springcloud+mybatis 开始第一步先写数据库,对数据库进行一个简单的设计,先提取功能: 一.功能提取: 用户信息的存储: ...
- android仿微信发布动态功能,Android仿微信朋友圈发布动态功能
一.前言 应工作上的要求,需要有一个类似于微信朋友圈发动态上传图片的功能,想起曾经已经做过了,但奈何不忍看自己以前写的代码的惨状,觉得重新封装一个使用方便,易于维护的类似功能的类,自己之后用起来也顺手 ...
- 仅展示近三天的动态设置_微信朋友圈各种设置功能的利弊 - “仅显示最近三天动态”...
今天利用我最近学习的产品知识,来分析一下朋友圈各种相关功能的利弊影响. 以下仅代表个人理论观点,如有不足,或您有意见.建议,欢迎加我一起探讨. 首先呢,我先来分下一下我认为的微信社交定位. 微信的定位 ...
- Python爬取微信朋友圈 ! 让屏蔽你的女神无处可躲 ?
接下来,我们将实现微信朋友圈的爬取. 如果直接用 Charles 或 mitmproxy 来监听微信朋友圈的接口数据,这是无法实现爬取的,因为数据都是被加密的.而 Appium 不同,Appium 作 ...
- 朋友圈(类似微信朋友圈)的显示
我们都知道,朋友圈的图片显示基本是随机的(一张图片时一排显示一张,两张图片时一排显示两张,三张图片时显示三张,超过三张就换行显示),这在很多应用中都经常运用到.这是示例图片 以android stud ...
- 如何关闭微信朋友圈的广告功能
如何去掉微信的朋友圈烦人的广告呢,请看下图
- android 朋友圈功能,Android仿微信朋友圈全文收起功能示例(附源码)
在众多的社交类软件中,朋友圈是必不可少的,可以与好友.同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非常不好,这时就要用到全文 ...
最新文章
- html脚本语言居中,web前端:CSS--几种常用的水平垂直居中对齐方法
- Android源码开发笔记 -- Android数据库,屏幕休眠时间
- 使用node.js进行API自动化回归测试
- 如何创建生成非 MFC 项目的自定义 AppWizards
- Visual.Assist.X 菜单汉化
- NULL和空字符的区别
- 大数据分析工具如何选择
- 蓝桥杯2017年第八届C/C++省赛B组第一题-购物单
- 学会这几个简单的bat代码,轻松在朋友面前装一波13
- mapbox/minemap 首屏固定比例尺为1:20
- 软路由虚拟服务器,带你入门软路由 篇三:软路由也玩虚拟化——轻松几步教你配置Esxi网卡直通和软路由虚拟机设置(保姆级教程)...
- linux根据文件名批量下载,Linux下多文件按照指定顺序批量解压和按照指定文件名更名...
- 怎样去提高效率,五步优化法
- 珠海 第十届亚洲机器人锦标赛_逾2000名选手云集珠海竞技第十届亚洲机器人锦标赛...
- NI Multisim元件库:在Multisim中创建自定义元器件
- 智能车扫线——斑马线识别
- linux下开启、关闭、重启mysql服务
- GB2312编码一级汉字表
- 优秀的数据产品经理需要掌握哪些技能?
- JSP 内置对象简述
热门文章
- One-Error多标签分类_一个小标签,拯救全屋收纳!
- 博客的评论与回复功能的实现
- ASEMI整流桥KBL406用于电脑适配器等
- android 手机内存分配,Android手机内存不足,你应该这样做,被震到
- 无货源创业者经验之谈:如何做好抖音小店无货源,店群这条路对不对?
- pytorch搭建PyQt5界面实战:ResNet-18实现CLFAR-10图像分类,并进行界面显示
- 计算机专业留学条件,美国留学申请计算机专业必备条件介绍
- 官宣:FISCO BCOS加入“国家队”,成为BSN首个国产底层技术平台
- python爬虫 常用网站_给新手推荐几个实用又适合上手的Python爬虫项目
- 在linux下终端输出对齐问题