我有一个评论表(ID、用户名、用户电子邮件、CommentBody、PostID)
以及另一个用于回复的表(ID、用户名、用户电子邮件、SubCommentBody、ParentCommentID)
在这种情况下,我只有一个嵌套评论/回复,每个评论可以有多个回复,但回复不能有任何回复
例如:
评论表
ID UserName UserEmail CommentBody PostID
-- -------- --------- ----------- ------
1 Dave <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3b5a7b5c565a525715585456" rel="noreferrer noopener nofollow">[email protected]</a> hello... 148
2 Alex <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c3a183a4aea2aaafeda0acae" rel="noreferrer noopener nofollow">[email protected]</a> hi.... 205
3 John <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e083a0878d81898cce838f8d" rel="noreferrer noopener nofollow">[email protected]</a> something.. 205
回复表
ID UserName UserEmail SubCommentBody ParentCommentID
-- -------- --------- ----------- ---------------
1 Jimmy <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="107750777d71797c3e737f7d" rel="noreferrer noopener nofollow">[email protected]</a> BlaBla... 1
2 Ben <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="670f27000a060e0b4904080a" rel="noreferrer noopener nofollow">[email protected]</a> Fine.... 1
3 Jerry <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5e331e39333f3732703d3133" rel="noreferrer noopener nofollow">[email protected]</a> something.. 2
我如何编写查询来获取评论及其回复?我不知道:)
最佳答案
仅使用回复
无需不同的评论和回复,因为它们具有相同的目的和结构(名称、正文等)。
仅使用回复(ID、用户名、用户电子邮件、正文、日期、ParentReplyId、PostId)
。
没有父级意味着根注释。如果它有父级,请将回复放在其父级下方。
使用日期
对回复进行排序。
使用递归查询
要加载给定回复的所有回复(分层结构),请使用递归查询。例如,加载Id=13
回复的所有回复,在SQL Server中是:
;WITH x AS
(
-- anchor:
SELECT Id, UserName, Body, ParentReplyId
FROM Replies WHERE ParentReplyId = 13
UNION ALL
-- recursive:
SELECT t.Id, t.FirstName, t.Body, t.ParentReplyId
FROM x INNER JOIN Replies AS t
ON t.ParentReplyId = x.Id
)
SELECT Id, FirstName, Body, ParentReplyId, FROM x
要加载给定帖子的所有回复,无需递归查询,只需加载链接到给定PostId
的所有回复即可:
SELECT * FROM Replies WHERE PostId = 100
关于sql-server - SELECT 注释及其回复 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435348/