【发布时间】:2017-07-10 23:07:35
【问题描述】:
我正在将通知消息发送到多个设备。 用户可以从多个设备登录。我有单独的表来维护每个用户的设备 ID。当我发送通知时,我将在 message_data 上添加一个包含用户 ID、消息等的条目,我将在每个用户设备的 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,则用户已阅读该消息。
一个用户可以从多个设备登录,如果用户在至少一个设备上阅读了消息,则应视为已阅读通知消息。
如果通知消息没有被用户在任何设备上阅读,则需要将其视为未读消息。
如何识别未读通知消息数的用户?对此有何想法?
【问题讨论】:
-
您需要查找是否有另一个状态 = 1 的 message_status,因此请使用 JOIN 或 NOT EXISTS 和
WHERE device_id = <devid> AND status = <read>。 -
@mroman 我需要按用户 ID 获取未读消息数。用户可以拥有多个注册设备。
-
user_id是唯一的吗? -
@Fabio 我可以向同一个用户发送多条通知消息,message_data 表的用户ID 字段不是唯一的。