0

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

消息表

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 的记录,则也计算在内。

4

1 回答 1

0
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)
于 2012-11-10T17:35:32.907 回答