PHP 系统群发消息怎么处理,标记已读未读?

2015-06-25 09:27:22 +08:00
 demonchang

我现在能想到的是每次用户登录之后,拉取系统消息然后记录到消息表,作已读未读的判断。。。
求指导

6661 次点击
所在节点    PHP
12 条回复
nilai
2015-06-25 10:04:01 +08:00
建立一个表, 放消息id 未读消息用户id(1,2,3,4,5) 当某个用户已经读取了这个消息后  再更新这个字段,移除当前用户id
zhouyuan24
2015-06-25 10:07:29 +08:00
还有就是 last_read_recordID
维护最后读得那条 聊天记录 ID

>它得 就是未读, <它得 就是已读
Tr0y
2015-06-25 10:47:02 +08:00
用redis的bitmap,2MB空间就可以分配很多用户了,2进制,0表示未读,1表示已读。
picasso250
2015-06-25 10:54:03 +08:00
我们就是这样做的
wulongqiu
2015-06-25 11:36:58 +08:00
@nilai 可以再多提供一些内容吗?谢谢。
mhycy
2015-06-25 11:50:49 +08:00
映射表做法算是最合适的做法了吧
消息表:
消息id,发布者id,内容,时间,更新时间,状态

状态表:
用户id,消息id,状态

对于全局消息,直接读消息表,对于部分群发消息或对于一对一消息,读状态表
demonchang
2015-06-25 12:15:44 +08:00
@mhycy 这个对于全局的直接读消息表那在每个用户状态显示正常么
@nilai 数组的我也考虑过了感觉处理麻烦了点


@Tr0y 暂时也想到了这个
mhycy
2015-06-25 12:18:18 +08:00
@demonchang

读消息表拉取消息,读了就给已读表写一个状态就好了。
状态获取用join能很快的实现,性能问题忽略
其实一般全局消息不多,分开查询也是可以的
toben
2015-06-25 14:03:21 +08:00
@Tr0y 赞一个
lianyue
2015-06-25 14:42:02 +08:00
这和语关系 吧 是数据库结构问题
rogeecn
2015-06-25 16:43:01 +08:00
@zhouyuan24 如果,12345用户名只读了135,246是个未读你这怎么办?
blue7wings
2015-06-29 16:09:40 +08:00
我觉得应该是这样的:
首先是user表,user_table:
id | name | xxxx |

然后是message表,message_table:
id | content | xxxx |

加一张中间表,user_message:

user_id | message_id | status |

如果status状态为1就表示已读,这张表可以添加索引,也可以使用缓存技术,数据虽然大,应该不会太慢的。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/200980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX