0

SQL 2008 ですべてのトピックの返信 (および返信への返信) をプルする適切な方法を見つけることに本当に行き詰まっています。

これがDB構造です。

フォーラム_猫

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 を渡すだけですべての応答子を生成できる関数が必要ですか?

たとえば、2 は 1 の応答であり、3 は 2 の応答であるため、 topicIDofを渡し、1行 2 と 3 を取得します。

4

2 に答える 2

0

返信の数がレベルを超えないように注意する限り、 CTEMAXRECURSIONを使用できます。

;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 に答える
0

再帰的な CTE を実装する必要があります。これは、やりたいことを正確に実行するための優れた例です。

共通テーブル式を使用した再帰クエリ

時間があり、助けが必要な場合は、テーブル構造に合うように例を改造しますが、それは非常に簡単です。しかし、これが MAXRECURSION レベルを超えていることは容易にわかります。より良いアプローチは、列を追加して各返信のトップ レベルのトピックを追跡し、次に ReplyTo で並べ替えることです。

于 2012-08-06T12:56:42.153 に答える