【发布时间】:2016-06-06 14:36:29
【问题描述】:
我正在尝试计算一条消息是否可见/不可见和已读/未读。
data_chats_parties表中有两个字段last_seen和last_read
在data_chats_messages 表中,有一个字段created 表示消息的创建时间。
我需要从created 中的时间戳中减去last_seen 和last_read 中的时间戳。
在对同一个表的列执行数学运算时查询工作正常,但是当我使用不同的表时,它返回一个空结果。
这是我现有的查询:
SELECT
data_chats.id AS chat,
data_chats_parties.*,
(SELECT COUNT(data_chats_parties.id) FROM data_chats_parties
WHERE data_chats_parties.chat = data_chats.id) AS total_parties,
data_chats_messages.created AS last_message_created,
data_chats_messages.author AS last_message_author,
data_chats_messages.author_type AS last_message_author_type,
data_chats_messages.message AS last_message,
(data_chats_messages.created - data_chats_parties.last_seen) AS unseen,
(data_chats_messages.created - data_chats_parties.last_read) AS unread
FROM data_chats
INNER JOIN data_chats_parties ON data_chats_parties.chat=data_chats.id
LEFT JOIN data_chats_messages ON data_chats_messages.chat=data_chats.id AND data_chats_messages.active=1
WHERE
data_chats.active=1 AND
data_chats_parties.member=1 AND
data_chats_parties.status >= 1
GROUP BY data_chats_parties.chat
ORDER BY last_message_created DESC
假设此查询按计划工作,如果 unread 或 unseen 是 > 0,则它是看不见的或未读的。
理想情况下,我可以将 unread 和 unseen 设置为 1 或 0 而不是改变值,这样排序会更容易,但如果这不可能,我的原始方法就足够了。
【问题讨论】: