PHP 站内消息的表结构设计
1)添加全站通知:信息存入到 tb_message 2)用户点开信息或者设置信息为已阅读:插入记录到 tb_message_readlog
如何设计存储的表?求最佳方案
CREATE TABLE `message` (
`message_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '消息id',
`subject` varchar(250) NOT NULL DEFAULT '' COMMENT '主题',
`content` varchar(500) NOT NULL DEFAULT '' COMMENT '内容',
`type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '消息类型 0 Message',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态 -1删除 0默认',
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY(`message_id`),
KEY `subject` (`subject`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `message_broadcast` (
`message_broadcast_id` bigint(20) NOT NULL AUTO_INCREMENT,
`message_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '消息id',
`sender` bigint(20) NOT NULL DEFAULT '0' COMMENT '发送者',
`receiver` bigint(20) NOT NULL DEFAULT '0' COMMENT '接收者',
`is_read` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态 0未读 1已读',
PRIMARY KEY(`message_broadcast_id`),
KEY `message_id` (`message_id`),
KEY `sender` (`sender`),
KEY `receiver` (`receiver`),
KEY `is_read` (`is_read`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='消息广播表';
大概思路跟你的差不多,这样就可以满足大部分的消息了
1.tb_message (id,content,fromUid,toUid [0表示全站用户,>0表示发送给某个用户])
2.tb_message_readlog (readLogId,messageId,uid,isread)
不过如果你的消息数据量比较大,建议你分表处理,可以根据用户的id来分表,比如id=123456的用户发送的消息就放到tb_message6,类似这样的处理
消息表message:
编号 id
时间 date
标题 title
正文 content
未读用户 unread
接收用户 receive
发送用户 send
字段receive保存消息接收人的ID序列如1,2,3,4(用逗号分隔).
字段unread保存未阅读消息的接收人的ID序列,unread初始值也为所有接收人,阅读过消息的用户则从中删除掉.
可以用MySQL内部函数FIND_IN_SET(返回找到的位置,从1开始)进行查询.
比如,查询编号为2的用户的未读信息:
SELECT * FROM `message` WHERE FIND_IN_SET('2', `unread`);
或者使用全文检索(需要对字段unread建立全文索引,ID序列用空格隔开,如1 2 3 4):
SELECT * FROM `message` WHERE MATCH(`unread`) AGAINST('2');
数据量比较大的话,FIND_IN_SET可能会存在性能问题,建议定时清理消息表过期的已经阅读过的消息.
PHP 站内消息的表结构设计的更多相关文章
- WebSocket实现站内消息实时推送
关于WebSocket WebSocket是HTML5 开始提供的一种在单个TCP连接上进行全双工通讯的协议.什么是全双工?就是在同一时间可以发送和接收消息,实现双向通信,比如打电话.WebSocke ...
- php 站内搜索 多表 分页
借鉴了:http://blog.chinaunix.net/uid-20787846-id-3488253.html 这篇文章 ,在此基础上增加了分页功能 <?php /* 关键字 */ $ke ...
- 站内信DB设计实现
两年前,万仓一黍在博客园发了两篇关于站内信的设计实现博文,<群发"站内信"的实现>.<群发"站内信"的实现(续)>,其中阐述了他关于站内 ...
- 使用Ajax轮询模拟简单的站内信箱(消息管理)功能
前一段时间项目需要写一个类似于站内信箱的消息管理的功能,由于对前端不是很熟悉,刚开始不知道怎么做,后来看了网上的方案,现模拟一个非常简单的消息管理. 我们首先看一下最终效果的样式,就是非常简单的一个样 ...
- 借助 Lucene.Net 构建站内搜索引擎(下)
前言:上一篇我们学习了Lucene.Net的基本概念.分词以及实现了一个最简单的搜索引擎,这一篇我们开始开发一个初具规模的站内搜索项目,通过开发站内搜索模块,我们可以方便地在项目中集成站内搜索功能.本 ...
- ASP.NET 实现站内信功能(点对点发送,管理员群发)
正好这段时间在研究这个功能,还是得感谢这位大神,没有他的引路,我就不可能把站内信做出来. http://www.cnblogs.com/grenet/archive/2010/03/08/168065 ...
- SNF开发平台WinForm之十四-站内发送系统信息-SNF快速开发平台3.3-Spring.Net.Framework
1运行效果: 2开发实现: .组装站内信息发送实体对象. SNFService SNFService = new SNFService(); if (this.ucUser.SelectedIds ! ...
- Lucene.Net 站内搜索
Lucene.Net 站内搜索 一 全文检索: like查询是全表扫描(为性能杀手)Lucene.Net搜索引擎,开源,而sql搜索引擎是收费的Lucene.Net只是一个全文检索开发包(只是帮我们 ...
- mysql 用户表结构设计,第三方登录
说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情.用户表结构的设计,算是整个后台架构的基石.如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地 ...
随机推荐
- cookies、sessionStorage和localStorage的异同点
相同点:都是存储于客户端 不同点: 1.存储大小 cookies数据大小不能大于4k; localStorage和sessionStroage则可以达到5M: 2.有效时间 cookies在设置的有效 ...
- c#窗体进度条
c#窗体进度条 //进度条的最大值 ; progressBar1.Maximum = Convert.ToInt32(a); ;i<progressBar1.Maximum;i++) { //进 ...
- input标签中的id和name的区别
做网站很久了,但到现在还没有搞明白input中name和id的区别,最近学习jquery,又遇到这个问题,就在网上搜集资料.看到这篇,就整理出来,以备后用. 可 以说几乎每个做过Web开发的人都问过, ...
- MySQL数据库、数据表和字段字符集查询、修改和配置
一.设置编码 LINUX 修改vi/etc/my.cnf WINDOWS my.ini 在[client]下添加 default-character-set=utf8 在[mysqld]下添加 ...
- selenium grid的使用
Selenium grid是用来分布式执行测试用例脚本的工具,比如测试人员经常要测试多浏览器的兼容性,那就可以用到grid了. selenium grid的hub相当于一个接收脚本并分发脚本的角色,n ...
- Android 服务和广播的使用
Android 服务和广播的使用 服务的使用 创建服务类 创建一个java文件,取名 mService.java,继承Service. public class mService extends Se ...
- AJAX--XMLHttpRequest对象
创建XMLHttpRequest对象 XMLHttpRequest是AJAX的基础. 所有现代浏览器(IE7+.Firefox.Chrome.Safari以及Opera)均内建XMLHttpReque ...
- Object.fromEntries
//数组转换成对象 const arr = [['foo', 1],['bar', 2]] const obj = Object.fromEntries(arr) console.log(obj.ba ...
- ubuntu16.04spyder闪退
解决办法我试了好用 sudo pip install --upgrade html5lib==.0b8 完事.
- Caffe实例
下载链接以及说明: 1.caffe代码按照官方教程下载windows分支下面的就可以了(https://github.com/BVLC/caffe/tree/windows). 2.cmake(ht ...