V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
demonchang
V2EX  ›  PHP

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

  •  
  •   demonchang · 2015-06-25 09:27:22 +08:00 · 6653 次点击
    这是一个创建于 3438 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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


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

    读消息表拉取消息,读了就给已读表写一个状态就好了。
    状态获取用join能很快的实现,性能问题忽略
    其实一般全局消息不多,分开查询也是可以的
    toben
        9
    toben  
       2015-06-25 14:03:21 +08:00
    @Tr0y 赞一个
    lianyue
        10
    lianyue  
       2015-06-25 14:42:02 +08:00 via iPhone
    这和语关系 吧 是数据库结构问题
    rogeecn
        11
    rogeecn  
       2015-06-25 16:43:01 +08:00
    @zhouyuan24 如果,12345用户名只读了135,246是个未读你这怎么办?
    blue7wings
        12
    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就表示已读,这张表可以添加索引,也可以使用缓存技术,数据虽然大,应该不会太慢的。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:56 · PVG 18:56 · LAX 02:56 · JFK 05:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.