我向多个设备发送通知消息。 用户可以从多个设备登录。我有单独的表来维护每个用户的设备ID。当我发送通知时,我将使用userid,message等在message_data上放置一个条目。,我将在message_status表中为每个用户设备添加一个条目。
这样我就可以维护每个设备通知发送状态并出错。
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,则用户已阅读该消息。
用户可以从多个设备登录,如果用户在至少一个设备上阅读该消息,则应将其视为已读取通知消息。
如果用户未在任何设备中读取通知消息,则需要将其视为未读消息。
如何识别未读通知消息计数的用户?有什么想法吗?
答案 0 :(得分: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
如果status
字段包含0
和1
以外的多个州,那么您可以这样做:
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
<强>更新强>
如果您想区分来自每个设备的未读取消息:
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