MySQL でのツリー構造の再帰
データベース内の階層データの管理は困難な場合があります。一般的なアプローチの 1 つは、提供された質問に示されているように、親子関係を使用することです。直接の子孫のクエリは簡単ですが、すべての子孫を取得するのはより複雑になる可能性があります。
MySQL ドキュメントでは、次のような階層データを処理するためのいくつかの方法が提案されています。
この例では、Path Enumeration メソッドを使用して、次のクエリは親の場所のすべての子孫を取得します。
WITH RECURSIVE descendant_path AS ( SELECT id, path FROM locations WHERE id IN (SELECT location_id FROM location_parent WHERE parent_id = '$locationid') UNION ALL SELECT l.id, CONCAT(dp.path, ',', l.id) FROM locations l JOIN descendant_path dp ON l.path LIKE CONCAT(dp.path, '%') ) SELECT id FROM descendant_path;
このクエリは、再帰的な CTE (共通テーブル式) を使用してツリー構造を反復処理し、子孫の場所ごとにパスを構築します。最初のクエリで開始位置を指定すると、すべての子孫を 1 回のパスで取得できます。
以上がMySQL ツリー構造内のすべての子孫を再帰的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。