SELECT 评论及其回复 SQL 服务器

SELECT Comments And Its Replies SQL Server

我有一个 table 用于评论(ID、用户名、用户电子邮件、评论正文、帖子 ID)

和另一个 table 回复(ID、用户名、用户电子邮件、SubCommentBody、ParentCommentID)

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

例如:

评论Table

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

回复Table

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

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

仅使用回复

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

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

无父项表示根注释。如果它有父级,则将回复放在其父级下。

使用 Date 对回复进行排序。

使用递归查询

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

;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

要加载给定 post 的 所有回复 ,不需要递归查询,只需加载链接到给定 PostId 的所有回复:

SELECT * FROM Replies WHERE PostId = 100

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

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

会给你所有的评论和他们的回复。

然后考虑对其进行排序,或者可能将每个评论的所有回复都拉到一个字段中。在互联网上失去了此类事情的帮助。