php公告栏系统,PHP系统公告-发送通知给每个人
經常有這樣的經歷,就是登陸一個系統,會有一條系統消息提示,而這條消息是針對所有人的,那么程序是如何區分哪些人已經看過這條消息哪些人沒看過呢?(因為沒看過的人會有一個提示一直掛在頁頭,而看過的人這個提示會自動消失),請問這種效果用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系统公告-发送通知给每个人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何编写php解析器_用于PHP的HL7
- 下一篇: php图片等比例压缩,php实现图片上传