【问题标题】:MySQL/PHP broadcast message systemMySQL/PHP广播消息系统
【发布时间】:2012-11-10 17:31:49
【问题描述】:

我正在开发一个消息传递系统,其中一方面是让我向所有用户广播消息。我没有将消息插入到每个用户的表中,而是有一个包含单个消息副本的表和另一个跟踪用户读取/删除的表。

消息表

message_id (primary,auto)  
dt  
message  

Messages_Status 表

message_id (int,11)  
user_id (int,10,indexed)  
user_read (tint,1)  
user_delete (tint,1)  
--> an index on (message_id,user_id)  

我正在尝试获取已登录用户的未读消息计数。如果messages_status 表中没有该特定消息和用户的记录(用户尚未阅读),或者如果该消息和用户的user_read=0 有记录,则也可以计算。

【问题讨论】:

    标签: mysql count message broadcast


    【解决方案1】:
    select count(m.message_id)
    messages m
    left outer join messages_status ms on ms.message_id = m.message_id
    where user_id = 123
    and (ms.message_id is null or ms.user_read = 0)
    

    【讨论】:

    • 由于状态表中最初不存在记录,因此无法找到 where user_id=123 进行计数。我也尝试过 ms.message_id IS NULL OR (ms.user_id=123 AND ms.user_read=0),但是一旦不同的用户将消息标记为已标记,该 message_id 的记录就会被输入到状态表中,导致ms.message_id IS NULL 语句无效。
    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多