SELECT注释及其回复SQL Server

时间:2016-09-11 10:57:44

标签: sql-server select nested comments reply

我有一个评论表(ID,UserName,UserEmail,CommentBody,PostID)

和其回复的另一个表(ID,UserName,UserEmail,SubCommentBody,ParentCommentID)

在这种情况下,我只有一个嵌套评论/回复,每个评论可以有多个回复,但回复不能有任何回复

例如:

评论表

ID    UserName    UserEmail    CommentBody    PostID
--    --------    ---------    -----------    ------
1     Dave        a@gmail.com  hello...       148
2     Alex        b@gmail.com  hi....         205
3     John        c@gmail.com  something..    205

回复表

ID    UserName    UserEmail    SubCommentBody    ParentCommentID
--    --------    ---------    -----------       ---------------
1     Jimmy       g@gmail.com  BlaBla...         1
2     Ben         h@gmail.com  Fine....          1
3     Jerry       m@gmail.com  something..       2

我如何编写查询以获取评论及其回复?我不知道:))

2 个答案:

答案 0 :(得分:2)

仅使用回复

无需区分评论和回复,因为它们具有相同的目的和结构(名称,正文等)。

仅使用Replies (ID, UserName, UserEmail, Body, Date, ParentReplyId, PostId)

没有父母意味着根评论。如果它有父项,则将答复置于其父项下。

使用Date对回复进行排序。

使用递归查询

要加载给定回复的所有回复(层次结构),请使用递归查询。例如,在SQL Server中加载Id=13回复的所有回复:

;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

答案 1 :(得分:0)

您需要编写一个将两个表连接在一起的查询。

select * 
from Comments c
inner join Replies r on (c.ID = r.ParentCommentID)

会得到所有评论和回复。

然后查看订购,或者每个评论将所有回复拉到一个字段中。这类事情在互联网上失去了帮助。