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)
会给你所有的评论和他们的回复。
然后考虑对其进行排序,或者可能将每个评论的所有回复都拉到一个字段中。在互联网上失去了此类事情的帮助。
我有一个 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)
会给你所有的评论和他们的回复。
然后考虑对其进行排序,或者可能将每个评论的所有回复都拉到一个字段中。在互联网上失去了此类事情的帮助。