ホームページ >バックエンド開発 >PHPチュートリアル >階層データベース内のすべての子サイトを効率的に取得するにはどうすればよいですか?
モデルを理解する
指定したテーブル構造は階層関係を表していますsite_Id フィールドとparent_Id フィールドを通じて。テーブルの各行はサイトに対応し、parent_Id は親サイトの ID を参照します。目標は、指定されたサイト ID のすべての子を効率的に取得することです。
現在のメソッドの制限
現在のアプローチでは、ループ内に複数のクエリが含まれているため、非効率的になる可能性があります。 。これを最適化するために、代替ソリューションを検討してみましょう。
PostgreSQL を使用した再帰クエリ
PostgreSQL などの再帰クエリをサポートするデータベースを使用するオプションがある場合は、再帰的な CTE (共通テーブル式) を使用して、単一のクエリで階層を横断できます。例:
WITH RECURSIVE ChildSites AS ( SELECT site_Id, parent_Id FROM site WHERE parent_Id = <input_site_id> UNION ALL SELECT s.site_Id, s.parent_Id FROM site AS s JOIN ChildSites AS cs ON s.parent_Id = cs.site_Id ) SELECT * FROM ChildSites;
最適化されたデータ モデル
データ モデルを変更できる場合は、次のような階層データ専用に設計されたデータ モデルの採用を検討してください。 🎜>
ルート ID の保存
または、テーブルに root_Id 列を追加して、各サイトの最上位の祖先を識別することもできます。これにより、単一のクエリを使用してツリー全体を効率的に取得できます:以上が階層データベース内のすべての子サイトを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。