mysql - 如何创建 SQL 查询来显示已读消息的计数器

标签 mysql sql sql-server

我对 Sql 很陌生,我希望有人可以提供帮助,我有一个名为 Project_Table(pjtID) 的表和另一个名为 Snag_Table(外键 sngProject_ID) 的表,然后我有一个 FeedBack_Table (外键 fdb_Snag_ID)。 我需要的是,当用户单击障碍时,他们可以编写一条消息,当他们返回到障碍列表时,它不能显示他们有任何待处理的消息,但分配该障碍的用户登录并看到有一条消息给他们。我如何处理它是否已被读取是在其他地方处理的。我构建了一个 SQL 查询来显示障碍列表和计数器。

SELECT  COUNT(CASE WHEN fdbRead = 2 THEN 1 ELSE NULL END) AS ReadCount,
        sngCreatedBy,sngAssignedToEmail,sngProject_ID,
        u1.useFullName as Createdname,
        sngCreatedBy,sngID,sngTitle,u2.useFullName as AssignedName,
        sngAssignedTo,sngStatusName,sngDescription,sngStartDate,
        sngDueDate,sngCreatedBy 
FROM Snag_Table 
    INNER JOIN User_Table u1 ON Snag_Table.sngCreatedBy = u1.useID 
    Left JOIN User_Table u2 ON Snag_Table.sngAssignedTo = u2.useID 
    LEFT JOIN FeedBack_Table ON Snag_Table.sngID = fdb_Snag_ID 
WHERE sngProject_ID = 10 
AND sngIsActive = 1 
GROUP BY sngCreatedBy,sngAssignedToEmail,sngProject_ID,
        u1.useFullName,Snag_Table.sngID,Snag_Table.sngTitle,
        u2.useFullName,sngAssignedTo,sngStatusName,sngDescription,
        sngStartDate,sngDueDate  
ORDER BY sngID DESC 

无论谁登录以及谁创建反馈,我得到的是计数器。 所以我尝试在查询中添加一些逻辑以根据登录者显示计数器,因此我在 where fdbCreatedBy != 17

之后添加
SELECT  COUNT(CASE WHEN fdbRead = 2 THEN 1 ELSE NULL END) AS ReadCount,
        sngCreatedBy,sngAssignedToEmail,sngProject_ID,
        u1.useFullName as Createdname,sngCreatedBy,
        sngID,sngTitle,u2.useFullName as AssignedName,
        sngAssignedTo,sngStatusName,sngDescription,sngStartDate,
        sngDueDate,sngCreatedBy 
FROM Snag_Table 
    INNER JOIN User_Table u1 ON Snag_Table.sngCreatedBy = u1.useID 
    Left JOIN User_Table u2 ON Snag_Table.sngAssignedTo = u2.useID 
    LEFT JOIN FeedBack_Table ON Snag_Table.sngID = fdb_Snag_ID 
WHERE *fdbCreatedBy != 17* 
AND sngProject_ID = 10 
AND sngIsActive = 1 
GROUP BY sngCreatedBy,sngAssignedToEmail,sngProject_ID,
        u1.useFullName,Snag_Table.sngID,Snag_Table.sngTitle,
        u2.useFullName,sngAssignedTo,sngStatusName,sngDescription,
        sngStartDate,sngDueDate  
ORDER BY sngID DESC

现在,计数器确实可以按需要工作,但前提是障碍物已经附加了反馈,但如果我创建一个新的障碍物并刷新列表,它不会显示障碍物。 任何帮助将不胜感激。

最佳答案

这可能对你有帮助

删除where条件

WHERE *fdbCreatedBy != 17* 

并在案例陈述中添加该条件

Count(CASE   WHEN (fdbread = 2 and  [fdbcreatedby] != 17 )THEN 1  ELSE NULL   END) AS readcount

关于mysql - 如何创建 SQL 查询来显示已读消息的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53813272/

相关文章:

php - 具有多个绑定(bind)参数的 MySQL UTF-8 全文搜索

MySQL COUNT 和 GROUP BY 子查询

mysql - SQL - MATCH 显示每一行

sql-server - SQL Server 应用程序角色与常规登录和用户

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式数量错误

mysql : how to escape double quote?

php - 双左连接查询需要优化

php - 复杂的 SQL 查询 - 热门内容

mysql - 如果值与同一表中的不同列匹配,则更新列

sql-server - 使用node js将多列和行插入SQL Server