我的系统中有以下场景:
一名成员:
CREATE TABLE `member` (
`memberid` int(11) NOT NULL,
`email` text
);创建协议:
CREATE TABLE `protocol` (
`protocolid` int(11) NOT NULL,
`createdby` int(11) NOT NULL,
`status` varchar(256) DEFAULT NULL
) ;成员可以创建关于协议的反馈帖子。
CREATE TABLE `protocolpost` (
`protocolid` int(11) NOT NULL,
`protocolpostid` int(11) NOT NULL,
`createdby` text
) ;成员可以回复反馈。
CREATE TABLE `protocolpostcomment` (
`protocolpostcommentid` int(11) NOT NULL,
`protocolpostid` int(11) NOT NULL,
`commentedby` varchar(256) DEFAULT NULL,
`hasfeedbackreplyviewed` tinyint(1) DEFAULT NULL
) ;我想得到成员创建的协议的所有帖子评论的回复总数,不包括创建该协议的用户的数量,以及帖子作者的评论。
到目前为止,我已经编写了这个查询,但是这个查询返回所有的post注释,我想排除反馈创建者所做的回复。
SELECT
protocols.*,
protocolFeedbackReply.*,
protocolfeedback.*
FROM protocolpost AS protocolfeedback
JOIN protocol AS protocols
ON protocols.protocolid = protocolfeedback.protocolid
JOIN protocolpostcomment AS protocolFeedbackReply
ON protocolfeedback.protocolpostid =
protocolFeedbackReply.protocolpostid
WHERE protocols.createdby = 1038
AND protocols.status = "published"
AND protocolFeedbackReply.hasfeedbackreplyviewed = 0
AND protocolfeedback.createdby NOT LIKE Concat('%', (SELECT email
FROM member
WHERE
memberid = 1038),
'%'); 我在这里附加了一个[医]小提琴:
在dbfiddle示例中,只有用户nwxaofrc@tempemail.com,所做的注释应该在计数上。
发布于 2022-05-19 13:02:13
谢谢你描述得很好。您的查询很难阅读,如果可能的话,可能会简化。无论如何,在您的NOT LIKE条件下,您似乎需要检查protocolFeedbackReply.commentedby而不是protocolfeedback.createdby,请参阅db<>fiddle
https://stackoverflow.com/questions/72304805
复制相似问题