站内消息设计

简介:

设计优点,发系统消息给全站用户只需一条记录,不需要每个用户都插入,解决用户量大的问题

登录用户只显示未读的消息。用户查看未读消息后,将消息插入消息回收站表标记为已读,uid与该用户绑定,因此回收站表没有uid=system的记录。

2)已读消息列表:实现方法有2种取其一即可

  2.1)插入消息回收站表并删除用户的未读消息表对应记录(非system)

  2.2)插入消息回收站表

删除的消息列表:只插入消息回收站表,

未读消息:当前用户没有读过的消息

 

未读消息/消息表

Java代码   收藏代码
  1. DROP TABLE IF EXISTS `msg`;  
  2. CREATE TABLE `msg` (  
  3.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  
  4.   `mail` varchar(60) NOT NULL DEFAULT 'system' COMMENT '邮箱:默认为system表示发给所有用户',  
  5.   `title` varchar(50) DEFAULT NULL COMMENT '标题',  
  6.   `content` text NOT NULL COMMENT '内容',  
  7.   `createtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',  
  8.   PRIMARY KEY (`id`)  
  9. ) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='公告表';  
  10.   
  11. INSERT INTO `msg` VALUES (1,'system','系统公告','今天天气不错',1394421260);  
  12. INSERT INTO `msg` VALUES (2,'test@163.com','用户i','aaaaaaaaaaaa',1394421299);  
  13. INSERT INTO `msg` VALUES (3,'danny@qq.com','用户公告heihei','aaaaaaa',1394421299);  
  14. INSERT INTO `msg` VALUES (4,'system','系统公告2','第二条消息',1394421260);  

 已读消息或删除消息

Java代码   收藏代码
  1. DROP TABLE IF EXISTS `msgrecycle`;  
  2. CREATE TABLE `msgrecycle` (  
  3.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  4.   `uid` varchar(200) NOT NULL COMMENT '用户id',  
  5.   `msgid` int(11) NOT NULL COMMENT '消息id',  
  6.   `isread` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '0-未读  1-已读',  
  7.   `isdelete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0-未删除 1-删除',  
  8.   PRIMARY KEY (`id`)  
  9. ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;  
  10.   
  11. LOCK TABLES `msgrecycle` WRITE;  
  12. INSERT INTO `msgrecycle` VALUES (1,'test@163.com',2,1,0);  
  13. INSERT INTO `msgrecycle` VALUES (2,'danny@qq.com',3,0,1);//删除的未读消息  
  14. INSERT INTO `msgrecycle` VALUES (3,'test@163.com', 1, 1, 0); //test@163.com用户已读的system消息  
  15. UNLOCK TABLES;  

 

显示用户已读消息mr.uid='test@163.com'

2.2)

Java代码   收藏代码
  1. select * FROM msg m left join msgrecycle mr on m.id=mr.msgid where (m.mail='system' or m.mail='test@163.com') and mr.uid='test@163.com' and isread=1 and isdelete=0  

2.1)

Java代码   收藏代码
  1. select * FROM msgrecycle where uid='test@163.com' and isread=1 and isdelete=0  

 

显示用户未读消息 = 消息回收站表没有读过的用户消息记录+消息回收站表没有读过的系统消息记录

消息回收站表没有读过的用户消息记录

Java代码   收藏代码
  1. select m.* FROM msg m left join msgrecycle mr on m.id=mr.msgid where m.mail='test@163.com' and mr.id is null   
 消息回收站表没有读过的系统消息记录
Java代码   收藏代码
  1. select * FROM msg where mail='system' AND id not in (select m.id FROM msg m left join msgrecycle mr on m.id=mr.msgid where m.mail='system' and mr.uid='test@163.com' and isread=1 and isdelete=0)   
 
相关文章
|
12月前
|
关系型数据库 Apache 微服务
《聊聊分布式》分布式系统基石:深入理解CAP理论及其工程实践
CAP理论指出分布式系统中一致性、可用性、分区容错性三者不可兼得,必须根据业务需求进行权衡。实际应用中,不同场景选择不同策略:金融系统重一致(CP),社交应用重可用(AP),内网系统可选CA。现代架构更趋向动态调整与混合策略,灵活应对复杂需求。
|
10月前
|
关系型数据库 MySQL Serverless
阿里云企业用户注册账号、优惠券领取、云服务器购买详细步骤流程(图文)
阿里云账号怎么注册?阿里云服务器怎么购买?好多同学都不清楚,今天写一篇文章进行系统性的介绍。最新阿里云企业用户注册流程,一键注册阿里云账号、快速通过企业实名认证,免费领取企业上云补贴折扣券、代金券、抵扣金、算力补贴及免费试用机会,这篇文章整理阿里云企业用户注册流程、所需材料及问题解答FAQ。
|
9月前
|
监控 安全 网络安全
开源木马“穿上隐身衣”:AsyncRAT新变种借云服务潜入企业内网,EDR成最后防线
一款标榜“教学用途”的开源工具AsyncRAT,正被全球犯罪团伙武器化,利用云存储分发、多层混淆和无文件攻击技术,绕过传统防护,对企业发起系统性入侵。从钓鱼邮件到内存渗透,攻击链高度隐蔽,凸显网络安全攻防新挑战。
597 4
|
存储 安全 Linux
Proxmox VE 9.0 Beta - 开源虚拟化管理平台
Proxmox VE 9.0 Beta - 开源虚拟化管理平台
1228 0
Proxmox VE 9.0 Beta - 开源虚拟化管理平台
|
安全 Java Maven
Spring Boot资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
Spring Boot资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
3019 1
|
数据采集 机器学习/深度学习 数据挖掘
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
|
XML Java 数据安全/隐私保护
企业微信接收回调
企业微信接收回调
1279 0
|
Web App开发 消息中间件 Prometheus
Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!(一)
Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!
|
测试技术 开发工具 文件存储
Git Stash
【8月更文挑战第27天】
1060 6
|
编解码 算法 计算机视觉
YOLOv8数据增强预处理方式详解:包括数据增强的作用,数据增强方式与方法
YOLOv8数据增强预处理方式详解:包括数据增强的作用,数据增强方式与方法

热门文章

最新文章