我花了两天时间让这个查询起作用,但最后......它无法正常工作。所以我有我的用户的消息系统,对于这个系统,我有两个表。消息和消息。 表 MESSAGES 包含以下列:
ID | message_body_last | user_from | user_to | user_seen_status
栏目解释:
表messages_body是我在用户之间放置所有对话的表。
表格 MESSAGES_BODY 包含以下列:
ID | MESSAGE_ID | MESSAGE_BODY | USER_FROM | USER_TO | USER_FROM_DELETE | USER_TO_DELETE
专栏解释:
所以,问题是:我想要计算新消息的数量。新消息是,如果我是ID为56的用户(这是我的测试ID), 我得检查一下。 messages.user_to是56而user_seen_status是0,但是我必须检查另外一种情况。在表MESSAGES_BODY中,USER_FROM_DELETE列和USER_TO_DELETE列不包含我的ID(56)。因为如果我删除了这些消息,那么从其他用户那里计算新消息是没有意义的。
这是我的疑问:
SELECT messages.id, (SELECT COUNT(*)
FROM messages
WHERE user_to = 56
AND user_seen_status = 0 ) as count_new_messages
FROM messages
LEFT JOIN messages_body
ON messages_body.message_id = messages.id
WHERE messages.user_to = 56
AND messages.user_seen_status = 0
AND ( messages_body.user_from_delete <> 56
AND messages_body.user_to_delete <> 56)
查询正在运行,但是如果我只有一个会话...(在表MESSAGES中,我只有一行,用户之间的每个会话在MESSAGES表中是一行,MESSAGES_BODY中有很多行) 如果我有更多的那个对话,COUNT(*)函数返回两行,数据相同,如果第二个会话处于已删除状态并不重要,他会向我显示两条新消息。
如何获取新邮件的实数?
答案 0 :(得分:-1)
[<强>解决强>
5分钟后更多,我得到了我的错误。我在计算MESSAGES表中的行,而不是来自MESSAGES_BODY。 这是我的工作查询,没有子查询。
SELECT messages.id, COUNT(messages_body.id) as count_value
FROM messages
LEFT JOIN messages_body
ON messages_body.message_id = messages.id
WHERE messages.user_to = 56
AND messages.user_seen_status = 0
AND messages_body.user_from_delete <> 56
AND messages_body.user_to_delete <> 56
现在正是我想要的。