用于计算未读邮件的MySQL查询

用于计算未读邮件的MySQL查询,mysql,Mysql,我花了两天时间让这个查询生效,但最后。。。它不能正常工作。所以我为我的用户提供了消息系统,对于这个系统,我有两个表。消息和消息体。 表消息包含以下列: ID | message_body_last | user_from | user_to | user_seen_status ID | MESSAGE_ID | MESSAGE_BODY | USER_FROM | USER_TO | USER_FROM_DELETE | USER_TO_DELETE 栏目说明: MESSAGE\u BOD

我花了两天时间让这个查询生效,但最后。。。它不能正常工作。所以我为我的用户提供了消息系统,对于这个系统,我有两个表。消息和消息体。 表消息包含以下列:

ID | message_body_last | user_from | user_to | user_seen_status
ID | MESSAGE_ID | MESSAGE_BODY | USER_FROM | USER_TO | USER_FROM_DELETE | USER_TO_DELETE
栏目说明:

MESSAGE\u BODY\u LAST->用户发送到 另外 用户\发送至->消息已发送至用户。。。 用户\u发件人->消息是从以下地址发送的。。。 用户\u查看\u状态->如果从用户\u查看到,我将值设为1,默认值为0。每次有人发信息的时候 另一方面,我将user_的值从和user_更改为every 时间,当某人向另一个用户发送消息时,以及列 user_seed_status是与user_to列的组合,用于检查 用户将看到该消息。此表是消息的标题。 Table messages\u body是我放置用户之间所有对话的表

表体包含以下列:

ID | message_body_last | user_from | user_to | user_seen_status
ID | MESSAGE_ID | MESSAGE_BODY | USER_FROM | USER_TO | USER_FROM_DELETE | USER_TO_DELETE
栏目说明:

ID-AI字段。 MESSAGE_ID是MESSAGES.ID的外键 消息体-消息的文本 USER_TO-谁发送消息USER_FROM-谁发送消息 USER_FROM_DELETE-如果有人删除了某些消息或所有消息,我会将用户的ID放在这里。 用户到删除-这是同一个字段。 所以,问题是:我想计算有多少条消息是新的。新消息是,如果我是ID为56的用户,例如,这是我的测试ID, 我得检查一下。Is messages.user_to是56,user_seed_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\u BODY中是多行 如果我有多个对话,COUNT*函数将返回两行数据相等的对话,无论第二个对话的状态是否为deleted,他都会向我显示两条新消息

如何仅获取新邮件的真实数量?

[已解决]

5分钟后,我得到了我的错误。我是在计算MESSAGES表中的行,而不是MESSAGES\u 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

现在正是我想要的工作方式。

请将您的解决方案发布为下面的答案,并从标题中删除[SOLVED]。发布答案,然后将其标记为已接受,这是向社区表明您的问题已得到纠正的最佳方式。好的,谢谢您的建议。由于缺少“分组依据”条款,此答案没有太多意义。我曾尝试使用“分组依据”,但结果不是我要搜索的结果。谢谢-1…不客气;否决票反映了这样一个事实,即这个答案对你自己或其他人都没有用处。它对我很有用,而且有效。如果您有更好的解决方案,请..这是一个有效的解决方案,SQL中没有问题。