我对 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/