0

私が設計したコメントシステムがあり、ネストなしで機能します。今、私は人々がそのページにある一般的なものではなく、コメントに直接返信できるようにしたいと思っています。そこで、親IDを指す親ID列をデータベースに追加することを考えました。

次のステップ(私はこれを実行するための良い方法を見つけるのに問題があります)。ネストされたコメントが親に適切に接続されるように、すべてのコメント(ネストされたものとされていないもの)をすべて共通の「thingid」に基づいてデータベースにクエリし、正しい順序で表示することです...効率的な方法はありますかこれらのコメントをすべて一緒に注文して、再帰などで奇妙なクエリ呼び出しを開始する必要がないようにしますか?すべてのコメントには、他の無関係なデータとともにタイムスタンプもあります。

提案をありがとう

4

1 に答える 1

3

「ネストされたセット」と呼ばれる概念があります。基本的に、各コメントと記事には 2 つの列があり、そのサブアイテム セットの「開始」と「終了」を指定します。すべてのコメントには、完全に親アイテムのセット内にある開始と終了があり、兄弟間に重複はありません。もう一方)。

                                   Article
                             /-----(1, 12)----\
                       Comment                 Comment
                   /---(2, 5)               /--(6, 11)--\
             Comment                    Comment        Comment
             (3, 4)                     (7, 8)         (9, 10)

特定のアイテムに対してクエリを実行するときは、記事 ID が一致し、そのセットがアイテムのセット内にあるすべてのアイテムを探します。これにより、すべての子とそのすべての子などが取得されます。それらを開始または終了で並べ替えると、コメントはほとんど順番に表示されるはずです。また、他のエンドポイントと比較して、一方が他方のサブアイテムであるかどうかを判断できます。(開始順で並べ替えており、この項目の終了が前の項目よりも短い場合は、サブ項目があります。)

欠点は、すべてのコメントでこれらのセットを更新する必要があることです。これは非常に単純ですが、非常に遅い可能性があります。(7,8) の下に別の項目を追加するには、たとえば、次のようにします。

  • その記事では、すべての 'end' >= 8 に 2 を追加して更新します。
  • その記事では、2 を追加してすべての 'start' > 8 を更新します。
  • (8, 9) のセットで、新しいアイテムを挿入します。

もちろん、挿入するコメントの「後」にコメントが多ければ多いほど、更新は遅くなります。

ちょっと待って..Google やめて...

http://en.wikipedia.org/wiki/Nested_set_model

于 2012-08-16T07:05:47.897 に答える