0

私は、すべてのユーザーにメッセージをブロードキャストすることが 1 つの側面であるメッセージング システムに取り組んでいます。各ユーザーのテーブルにメッセージを挿入する代わりに、メッセージの単一のコピーを含む 1 つのテーブルと、ユーザーの読み取り/削除を追跡する別のテーブルを用意します。

メッセージ表

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 に答える