2012-11-10 43 views
0

我正在研究一个消息系统,其中一个方面是我向所有用户广播消息。我没有为每个用户在表中插入消息,而是有一个表包含消息的单个副本,另一个表跟踪用户的读取/删除。MySQL/PHP广播消息系统

信息表

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的消息和用户有记录,那么也是如此。

回答

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) 
+0

由于记录最初不存在于状态表中,因此将找不到用于计数的user_id = 123。我也尝试过ms.message_id为空或(ms.user_id = 123 AND ms.user_read = 0),但只要不同的用户将该消息标记为该记录的message_id被输入到状态表中, ms.message_id IS NULL语句无效。 – Jonathan