2012-11-10 46 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