经常有这样的经历,就是登陆一个系统,会有一条系统消息提示,而这条消息是针对所有人的,那么程序是如何区分哪些人已经看过这条消息哪些人没看过呢?(因为没看过的人会有一个提示一直挂在页头,而看过的人这个提示会自动消失),请问这种效果用php是如何做到的,数据结构是如何设计?

回复讨论(解决方案)

首先得有一个消息列表,表里面有个是否阅读字段就行了啊

首先得有一个消息列表,表里面有个是否阅读字段就行了啊那要是有十万个用户,有的看过了有的没看过 ,这个字段怎么标注啊?

这条消息是谁发的,发给谁 表里面也都需要记录啊,这样你就可以根据每个用户的用户id去读取个人的消息了

表结构

table1:message

msg_id msg_content publish_time

table2:read

msg_id user_id read_time

发布一条系统消息 在message插入一条记录即可

如:

123 “下午休息” 1414468731

看过的人在read表中插入一条记录

123 5145 1414468745

判断是否有未读信息

select * from message where msg_id not in (select msg_id from read where user_id = 5145)

如果你对sql效率关注 可以用下面的

select * from message where message left join (select* from read where user_id = 5145 )temp on message.msg_id = temp .msg_id where temp.user_id is null;

表结构

table1:message

msg_id msg_content publish_time

table2:read

msg_id user_id read_time

发布一条系统消息 在message插入一条记录即可

如:

123 “下午休息” 1414468731

看过的人在read表中插入一条记录

123 5145 1414468745

判断是否有未读信息

select * from message where msg_id not in (select msg_id from read where user_id = 5145)

如果你对sql效率关注 可以用下面的

select * from message where message left join (select* from read where user_id = 5145 )temp on message.msg_id = temp .msg_id where temp.user_id is null;谢谢你的详细答复,这个方式我也考虑过,只是如果系统消息发布多了的话,再加上用户数量大,这样子操作数据库量就非常大了,假如有10W用户,看一条系统消息就有10W条记录了,有没有更简单的方式呢?

这条消息是谁发的,发给谁 表里面也都需要记录啊,这样你就可以根据每个用户的用户id去读取个人的消息了这是针对所有人的,所以这种推送模式不太合适

表结构

table1:message

msg_id msg_content publish_time

table2:read

msg_id user_id read_time

发布一条系统消息 在message插入一条记录即可

如:

123 “下午休息” 1414468731

看过的人在read表中插入一条记录

123 5145 1414468745

判断是否有未读信息

select * from message where msg_id not in (select msg_id from read where user_id = 5145)

如果你对sql效率关注 可以用下面的

select * from message where message left join (select* from read where user_id = 5145 )temp on message.msg_id = temp .msg_id where temp.user_id is null;谢谢你的详细答复,这个方式我也考虑过,只是如果系统消息发布多了的话,再加上用户数量大,这样子操作数据库量就非常大了,假如有10W用户,看一条系统消息就有10W条记录了,有没有更简单的方式呢?

哈哈 那考虑考虑 redis

10W 用用户 需要15K内存标记用户是否发送 每条消息都是15K

1.读取消息 setbit msg_123 5415 1

2.判断是否读取 getbit msg_123 5415

消息表有内容和userid,如果userid=0,表示该消息为全局

用户表中,可以增加一个字段记录查看过的消息id,用逗号隔开,比如 1,20,123

看过一条就加一个消息id

如果消息比较频繁,可以考虑单独维护一个消息查看记录表,只有uid msgid两个字段,记录已查看

弄个表把看过的人装起来???

没有查询到的就显示给他

表结构

table1:message

msg_id msg_content publish_time

table2:read

msg_id user_id read_time

发布一条系统消息 在message插入一条记录即可

如:

123 “下午休息” 1414468731

看过的人在read表中插入一条记录

123 5145 1414468745

判断是否有未读信息

select * from message where msg_id not in (select msg_id from read where user_id = 5145)

如果你对sql效率关注 可以用下面的

select * from message where message left join (select* from read where user_id = 5145 )temp on message.msg_id = temp .msg_id where temp.user_id is null;谢谢你的详细答复,这个方式我也考虑过,只是如果系统消息发布多了的话,再加上用户数量大,这样子操作数据库量就非常大了,假如有10W用户,看一条系统消息就有10W条记录了,有没有更简单的方式呢?

哈哈 那考虑考虑 redis

10W 用用户 需要15K内存标记用户是否发送 每条消息都是15K

1.读取消息 setbit msg_123 5415 1

2.判断是否读取 getbit msg_123 5415

再次谢谢你的帮助!

消息表有内容和userid,如果userid=0,表示该消息为全局

用户表中,可以增加一个字段记录查看过的消息id,用逗号隔开,比如 1,20,123

看过一条就加一个消息id

如果消息比较频繁,可以考虑单独维护一个消息查看记录表,只有uid msgid两个字段,记录已查看恩恩!这个可以考虑一下,目前也只有这个方式要方便一点啦

没有查询到的就显示给他

恩!可以这样子试试

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php公告栏系统,PHP系统公告-发送通知给每个人相关推荐

  1. Swift - 使用NSNotificationCenter发送通知,接收通知

    1,通知(NSNotification)介绍 这里所说的通知不是指发给用户看的通知消息,而是系统内部进行消息传递的通知.要介绍通知之前,我们需要先了解什么是观察者模式. 观察者模式 (Observer ...

  2. Spring如何优雅地发送异步发送通知?

    题主应该想问的是在spring框架下如何开发一个"优雅的.异步的"的去执行一个功能吧?至于这个功能是发送一条MQ消息啊还是发送一份邮件.一条短信都可以,重要的是想异步且优雅的执行这 ...

  3. 小程序发送通知-可重复多次发送

    一.小程序发送订阅消息背景 发送永久订阅消息目前微信只支持集中行业:市政,金融,在线教育等,其他行业暂未开通 但是项目均不符合以上条件,想要实现发送永久订阅消息就需要使用公众号模板消息:公众号模板消息 ...

  4. Jenkins+Allure测试报告+飞书机器人发送通知

    Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...

  5. Android发送通知——通知栏(Notification)

    Android发送通知--通知栏(Notification) 通知是指 Android 在您应用的界面之外显示的消息,旨在向用户提供提醒.来自他人的通信信息或您应用中的其他实时信息.在发出一条通知后, ...

  6. autojs免root脚本引擎开发的发送通知和去除通知代码,值得参考学习

    说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...

  7. 医院HIS系统短信发送模板

    医疗信息系统HIS短信接口解决方案 为数字化医院系统提供可靠的短信通知服务 同医院信息化系统整合,为预约挂号.网络问诊.体检报告通知.不良事件预警.内部网络办公等场景提供短信通知能力.提供免安装的在线 ...

  8. Jenkins+飞书机器人发送通知

    1. 在飞书群中添加自定义机器人 在飞书群中添加自定义机器人   2. Python发送通知的脚本 在部署Jenkins的服务器上创建一个目录,名称随意,创建feizhutongzhi.py脚本文件, ...

  9. 详解android高仿微信后台接受消息,发送通知,监测网络连接

    公司让我研究websocket,利用这个时间写了个仿微信的demo. 服务器端功能比较简单:转发给所有的client (类似与群聊) android端功能:service后台接受消息:broadcas ...

最新文章

  1. android 中的invalidate 和 postInvalidate
  2. 批量梯度下降 linux,梯度下降的三种形式BGD,SGD,MBGD(MSGD)
  3. Spring Security 中取得 RememberMe 的 cookie 值
  4. 3、AngularJS2 架构
  5. oracle关于时区,关于oracle时区
  6. Nexus协议,闲鱼一体化开发的幕后玩家
  7. js判断数组里是否有重复元素的方法
  8. webpack4开始使用
  9. MUI框架学习——了解MUI
  10. Visual Studio 2017 激活密钥 [复制记录]
  11. MacBook上有哪些相见恨晚的神器
  12. Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found
  13. Type-C口充电器头为什么没有电压输出?
  14. 【图像处理】【图像去模糊】 总结
  15. 技术视频下载地址分享
  16. 最新PHP开源采集器/蓝天采集器系统源码
  17. 【信息技术】【2010.09】声纳和水下摄像机图像分析
  18. pet shop 4.0架构信息-转
  19. Oracle数据库如何干净的删除
  20. 电脑粉碎文件 c语言,C/C++ 编译器的命名粉碎规则(name mangling)和C/C++混合(ZZ)

热门文章

  1. 辛东方:科技的发展将导致更多人失业?
  2. CSS 巧用 :before和:after
  3. swoole 异步redis
  4. php中四种webservice实现的简单架构方法及实例
  5. 马克.扎克伯格的执行力
  6. TikTok Shop新增三大站点,已开放申请
  7. 找不到网卡eth0的解决方法
  8. 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践
  9. [HNOI2016]最小公倍数
  10. PAT-1124. Raffle for Weibo Followers (20)