从表消息和看到的消息中获取未读消息计数

时间:2019-12-13 12:04:48

标签: mysql sql

我有两个表,学生信息和学生信息

我的问题是我无法让查询运行,因此我可以说全局“(用户)有 4 个未读邮件”

I've created a mysqlfiddle here

认为我已经正确地获得了第二个查询,但是我希望有人确认它的正确性。它产生正确的数字,但我不确定。请有人可以帮助我实现对两种不同计数的正确处理吗?

2 个答案:

答案 0 :(得分:0)

您的第二个查询是正确的。要使其成为全局变量,只需删除线程ID where条件。您将需要对学生邮件收件人的索引。

答案 1 :(得分:0)

我将对您的第一个查询进行如下表述(对更改进行评论):

SELECT COUNT(*) FROM `student-messages` t1 
LEFT JOIN `student-messages-seen` t2 
    ON t2.messageID = t1.id 
    AND t2.userID = t1.recipient    -- moved from the WHERE clause
WHERE 
    t1.recipient = 1001 
    -- AND t2.userID = 1001         -- moved to the ON part of the JOIN
    AND t2.id IS NULL               -- fiter on unread messages
ORDER BY t1.ts DESC;

第二个查询本质上是相同的,只是在线程上有一个额外的过滤器:

SELECT COUNT(*) FROM `student-messages` t1 
LEFT JOIN `student-messages-seen` t2 
    ON t2.messageID = t1.id 
    AND t2.userID = t1.recipient   
WHERE 
    t1.recipient = 1001 
    AND t1.thread = 69
    AND t2.id IS NULL
ORDER BY t1.ts DESC;