我有一个评论表(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
我如何编写查询以获取评论及其回复?我不知道:))
答案 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)
会得到所有评论和回复。
然后查看订购,或者每个评论将所有回复拉到一个字段中。这类事情在互联网上失去了帮助。