2017-02-21 4 views
0

私はです。複数のデバイスに通知メッセージを送信していますユーザーは複数のデバイスからログインできます。私は、各ユーザーのデバイスIDを維持する別のテーブルを持っています。 私はmessage_dataとuserid、messageなどを入力します。、各ユーザデバイスのmessage_statusテーブルにエントリを入れます。ユーザの未読メッセージ数をカウントするMySQLクエリ

私は各デバイスをメンテナンスできるように通知のステータスはで、エラーが発生しました。

message_data 
id   INT  
userid  VARCHAR 
message  VARCHAR 
sent_time DATETIME 
language TINYINT 

message_status 
id    INT 
data_id   INT 
device_id  VARCHAR 
device_type  TINYINT 
sent_time  DATETIME 
status   TINYINT 
error_code  TINYINT (If there is any error, we will have the error code here) 

各ユーザーの未読通知メッセージ数を取得したいと考えています。ステータスフィールド0は、このデバイスのメッセージがまだユーザーによって読み取られていないことを示します。 1の場合、ユーザーはメッセージを読んでいます。

ユーザーは、複数のデバイスからログインできます。ユーザーが少なくとも1つのデバイスでメッセージを読む場合は、通知メッセージが読み込まれると考慮する必要があります。

通知メッセージがどのデバイスでもユーザーによって読み取られない場合は、未読メッセージとみなす必要があります。

未読通知メッセージ数のユーザーを特定するにはどうすればよいですか?これに関するアイデアは? statusフィールドが01以外の複数の状態を持っているなら、あなたはそれを行うことができます

+0

status = 1の別のmessage_statusがあるかどうかを調べる必要があります。そのため、 'WHERE device_id = AND status = 'でJOINまたはNOT EXISTSを使用してください。 – mroman

+0

@mroman私は未読メッセージ数をuseridで取得する必要があります。ユーザーは多数の登録済みデバイスを持つことができます。 – Muthu

+0

は一意の 'user_id'ですか? – Fabio

答えて

1
Select 
    m.*, -- m.user_id 
    IF (SUM(s.status) > 0, 1, 0) has_un_read, 
    SUM(s.status) unread_messages_count 
From message_data m 
INNER JOIN message_status s on m.id = s.data_id 
Group By m.id 
having SUM(s.status) > 0 

Select 
    m.*, 
    IF(SUM(IF(s.status = 1, 1, 0)) > 0, 1, 0) has_un_read, 
    SUM(if(s.status = 1, 1, 0)) unread_messages_count 
From message_data m 
INNER JOIN message_status s on m.id = s.data_id 
Group By m.id 

UPDATE

あなたからアン読み取りメッセージを区別したい場合すべての端末:

Select 
    m.*, 
    s.device_id, 
    IF (SUM(s.status) > 0, 1, 0) has_un_read, 
    SUM(s.status) unread_messages_count 
From message_data m 
INNER JOIN message_status s on m.id = s.data_id 
Group By m.id, s.device_id 
having SUM(s.status) > 0 
+0

読み込み/未読以外のステータスを導入すると危険です。 – mroman

+0

@wajeeh特定のユーザーの未読メッセージ数がカウントされますか? – Muthu

+0

'status'フィールドは、彼が尋ねたように' 1'でも '0'でもかまわないので危険ではありません。 @mroman – wajeeh

関連する問題