如何解决检索评论的回复数
我有以下PostgreSQL表来存储对不同帖子的评论:
评论表:
commentID | parentID | postID | content | author | created
我现在想使用给定postID的单个查询来检索帖子的所有评论以及每个评论的回复数。如果parentID不为null且等于其父对象的commentID,则注释就是答复。
我尝试了以下类似的方法,在该表上我自己加入了表并寻找parentID = commentID
的匹配项,但是我无法使其正常运行,希望能有所帮助:)
SELECT comments.commentID as commentID,comments.parentID as parentID,comments.postID as postID,comments.content as content,comments.author as author,comments.created as created,COALESCE(c1.numReplies,0) as numReplies
FROM comments c0
LEFT JOIN (
SELECT parentID,COUNT(*) FILTER (WHERE postID = :givenPostID) as numReplies as numReplies
FROM comments
) c1 on c0.commentID = c1.parentID
WHERE c0.postID = :givenPostID;
解决方法
这看起来像是子查询或横向联接的好地方:
select c.*,c1.no_replies
from comments c
cross join lateral (
select count(*) no_replies
from comments c1
where c1.parentid = c.commentid
) c1
where c.postid = :givenpostid
旁注-您要编写的查询可能是:
SELECT c0.*,COALESCE(c1.numReplies,0) as numReplies
FROM comments c0
LEFT JOIN (
SELECT parentID,COUNT(*) as numReplies
FROM comments
GROUP BY parentID
) c1 on c0.commentID = c1.parentID
WHERE c0.postID = :givenPostID
子查询略有不同:首先,它需要一个GROUP BY
子句才是有效的SQL;而且,不需要条件计数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。