0

我真的被困在这里寻找一种合适的方法来提取 SQL 2008 中的所有主题回复(以及对回复的回复)。

这是数据库结构。

论坛_猫

catID    |    CatName
1        |    Q&A
2        |    General Discussion

论坛_话题

topicID  |   catID   |   ReplyTo   |   TopicTitle                      
1        |   1       |   null      |   Just wondering if anyone knows?
2        |   1       |   1         |   Yeah I know that.
3        |   1       |   2         |   Thanks

那么我是否需要一个函数来传递一个 topicID 并生成所有回复子项?

例如,我通过topicIDof1并返回第 2 行和第 3 行,因为 2 是 1 的回复,3 是 2 的回复。

4

2 回答 2

0

您需要实现递归 CTE。这是一个很好的例子,可以准确地做你想做的事情。

使用公用表表达式的递归查询

如果我有时间并且如果您需要帮助,我会修改示例以适合您的表格结构,但这非常简单。但我可以很容易地看到这超过了 MAXRECURSION 级别。更好的方法可能是添加一列来跟踪每个回复中的顶级主题,然后按回复顺序排序。

于 2012-08-06T12:56:42.153 回答
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
于 2012-08-06T13:02:44.187 回答