1

2 レベルの階層コメント システムのスレッド ビューをレンダリングする必要があります。コメントはデータベースに保存されます。階層に関する情報は、フィールド 'parent_id' (最上位のコメントの場合は 0) によって提供されます。データベースの構造を変更できません。現在のソリューションは、複数の SQL クエリによるものです。

  1. すべてのトップレベルのコメントを取得するために SQL クエリが実行されます
  2. コードはトップレベルのコメントをループし、それぞれに対して SQL クエリを実行してその子を取得します

ここで、すべてのコメントをフェッチするための SQL クエリを 1 つだけ使用したソリューションと、その後にスレッドごとに並べ替えるためにここで提案されているコードが続くソリューションの方が効率的かどうか疑問に思います。何かお勧めはありますか?

ありがとう、ルチアーノ

4

1 に答える 1

0

私は同様のスクリプトを実行しましたが、私の観点からは、最初のクエリを実行してすべての「親」(parent_id == 0)をフェッチしてから、それぞれに対して別のクエリを実行してすべての「息子」情報を取得することをお勧めします。 。

単一のクエリを使用して膨大な量の脅威を取得する必要がある場合は、クエリが完了してデータを処理するのを待つ必要があります。検索をさまざまな小さなクエリに分割すると、「息子」を探す前にフォーマットと印刷を開始できます。また、単一のクエリでこれを行うと、クエリが遅くなる可能性があります。同じクエリでより多くのテーブルを使用すると、誰かが新しい脅威を作成しているときにlock_tableが原因でクエリが停止する可能性があるためです。

別の解決策。複数のJOINを使用するように強制されたり、インデックス付けされていないフィールドでWHEREを使用したりするためにクエリが非常に遅い場合にのみお勧めします(絶対に行わないでください。ただし、データベースを変更できない場合は...)は、単一のクエリですべての脅威を取得し(親と息子の両方で、クエリを遅くするWHEREまたはJOINを使用せずに)、PHPを使用してそれらを整理します。これは決して実用的ではなく、クエリを完了する時間が非常に長い場合を除いて、この方法を使用しないでください。

于 2012-11-08T11:07:34.223 に答える