日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/4/17 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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系统公告-发送通知给每个人的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。