用于计算未读邮件的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中没有问题。