ユーザーのコメントを含むテーブルがあるとします。第 1 レベルのコメントには、添付されている記事への参照があります。より深いレベルのコメントには、設計上この参照はありませんが、親コメントへの参照があります。
このデータベース構造の場合、特定の記事のすべてのコメントを取得し、それを html 形式でレンダリングする最も効率的な方法は何でしょうか? (最初のレベルと 20 の最も深いレベルの約 200 のコメントがあると仮定しましょう)
ユーザーのコメントを含むテーブルがあるとします。第 1 レベルのコメントには、添付されている記事への参照があります。より深いレベルのコメントには、設計上この参照はありませんが、親コメントへの参照があります。
このデータベース構造の場合、特定の記事のすべてのコメントを取得し、それを html 形式でレンダリングする最も効率的な方法は何でしょうか? (最初のレベルと 20 の最も深いレベルの約 200 のコメントがあると仮定しましょう)
通常はClosure Tableというデザインをお勧めします。
フラットテーブルをツリーに解析する最も効率的/エレガントな方法は何ですか?への私の回答の例を参照してください。
このプレゼンテーションもデザインしました: Models for Hierarchical Data with SQL and PHP。490k ノードの階層データのコレクションから、0.3 秒でツリーをレンダリングする PHP アプリを開発しました。
ここで Closure Table についてブログを書きました: Rendering Trees with Closure Table。
私は、著書SQL Antipatterns: Avoiding the Pitfalls of Database Programmingで、階層データのさまざまな戦略についての章を書きました。
最も効率的な方法として、 Quassnoiはこのテーマに関する一連の記事を書いています。
最初の記事を読み、特定のテーブルで機能するように例を調整することをお勧めしますが、重要なのは、フェッチする必要のある行を再帰できる関数を作成することです。レベル(階層の深さ)も必要になる可能性があるため、2番目の記事もおそらく関連性があります。
他の種類のクエリをデータに対して行う必要がある場合は、他の記事が役立つ場合があります。彼はまた、隣接リストと入れ子集合:MySQLの記事を持っており、隣接モデルと入れ子集合モデルの両方について高度に最適化されたクエリを比較しています。