我真的很想找到一种合适的方法来在SQL 2008中提取所有主题回复(以及回复回复)。
这是数据库结构。
Forum_Cats
catID | CatName
1 | Q&A
2 | General Discussion
Forum_Topics
topicID | catID | ReplyTo | TopicTitle
1 | 1 | null | Just wondering if anyone knows?
2 | 1 | 1 | Yeah I know that.
3 | 1 | 2 | Thanks
那么我需要一个函数,我可以传递一个topicID并生成所有回复子项吗?
E.g。我传递topicID
1
并返回第2行和第3行,因为2是1的答复,3是2的答复。
答案 0 :(得分:0)
您需要实现递归CTE。这是一个很好的例子,可以完全按照你想要做的去做。
Recursive Queries Using Common Table Expressions
如果我有时间并且您需要帮助,我会改进示例以适应您的桌面结构,但它非常直接。但我很容易看到这超过了MAXRECURSION级别。更好的方法可能是添加一列来跟踪每个回复中的顶级主题,然后按ReplyTo排序。
答案 1 :(得分:0)
只要您注意确保回复的数量不超过MAXRECURSION
级别,您就可以使用CTE:
;WITH topic (topicId, catId, replyTo, topicTitle) AS (
SELECT topicId, catId, replyTo, topicTitle
FROM Forum_Topics F
WHERE F.topicId = @topicId
UNION ALL
SELECT topicId, catId, replyTo, topicTitle
FROM Forum_Topics F
INNER JOIN topic T ON T.topicId = F.replyTo
)
SELECT * FROM topic