站内消息设计

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

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

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

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

  2.2)插入消息回收站表

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

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

 

未读消息/消息表

DROP TABLE IF EXISTS `msg`;
CREATE TABLE `msg` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `mail` varchar(60) NOT NULL DEFAULT 'system' COMMENT '邮箱:默认为system表示发给所有用户',
  `title` varchar(50) DEFAULT NULL COMMENT '标题',
  `content` text NOT NULL COMMENT '内容',
  `createtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='公告表';

INSERT INTO `msg` VALUES (1,'system','系统公告','今天天气不错',1394421260);
INSERT INTO `msg` VALUES (2,'test@163.com','用户i','aaaaaaaaaaaa',1394421299);
INSERT INTO `msg` VALUES (3,'danny@qq.com','用户公告heihei','aaaaaaa',1394421299);
INSERT INTO `msg` VALUES (4,'system','系统公告2','第二条消息',1394421260);

 已读消息或删除消息

DROP TABLE IF EXISTS `msgrecycle`;
CREATE TABLE `msgrecycle` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(200) NOT NULL COMMENT '用户id',
  `msgid` int(11) NOT NULL COMMENT '消息id',
  `isread` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '0-未读  1-已读',
  `isdelete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0-未删除 1-删除',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

LOCK TABLES `msgrecycle` WRITE;
INSERT INTO `msgrecycle` VALUES (1,'test@163.com',2,1,0);
INSERT INTO `msgrecycle` VALUES (2,'danny@qq.com',3,0,1);//删除的未读消息
INSERT INTO `msgrecycle` VALUES (3,'test@163.com', 1, 1, 0); //test@163.com用户已读的system消息
UNLOCK TABLES;

 

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

2.2)

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)

select * FROM msgrecycle where uid='test@163.com' and isread=1 and isdelete=0

 

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

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

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 
 消息回收站表没有读过的系统消息记录
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) 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
好的,下面是一个简单的Java站内设计思路: 1. 数据库设计 首先需要设计一个数据库用于存储站内信的信息,可以考虑以下几个表: - 用户表:用于存储系统用户的基本信息,包括用户ID、用户名、密码、邮箱等信息。 - 消息表:用于存储站内信的基本信息,包括消息ID、发送者ID、接收者ID、消息标题、消息内容、发送时间、是否已读等信息。 - 消息附件表:如果您想让用户可以附加文件,请设计一个消息附件表,用于存储附件的信息,包括附件ID、消息ID、附件名称、附件类型、附件大小、上传时间等信息。 2. 后台实现 在后台实现中,需要考虑以下几个方面: - 用户登陆:用户需要先登陆系统才能使用站内信功能,因此需要设计一个登陆页面和相关的登陆逻辑。 - 发送消息:用户可以通过站内信发送消息给其他用户,因此需要设计一个发送消息页面和相关的发送逻辑。 - 查看消息:用户可以查看自己收到的消息,因此需要设计一个消息列表页面和相关的查询逻辑,同时还需要支持分页查询。 - 删除消息:用户可以删除自己收到的消息,因此需要设计一个删除消息的逻辑。 - 附件上传和下载:如果您设计消息附件表,那么还需要支持附件的上传和下载功能。 3. 前端实现 在前端实现中,需要考虑以下几个方面: - 用户登陆页面:设计一个用户登陆页面,可以根据实际需求添加验证码等功能。 - 发送消息页面:设计一个发送消息页面,包括消息标题、消息内容、接收者等信息。 - 消息列表页面:设计一个消息列表页面,用于显示用户收到的消息,同时还需要支持分页查询。 - 消息详情页面:设计一个消息详情页面,用于显示消息的详细信息,包括消息标题、消息内容、发送者、发送时间等信息。 - 附件上传和下载功能:如果您设计消息附件表,那么还需要设计一个附件上传和下载功能。 以上是一个简单的Java站内设计思路,具体实现可能会根据实际需求有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值