これは単純な<em>隣接モデルです。 テーブル?その場合、最大深度を知らずに1つのクエリでそれを行うことはできません。
思考の糧は、MySQLでの階層データの管理 です。 (ただし、入れ子集合モデルの使用は推奨していません。 定期的に変更されるデータの場合)。
多くの(左)結合がある場合、より具体的には、ツリーの最大深度と同じ数の左結合がある場合、1つのクエリで可能になります。これが、多くの人が特定のカテゴリの「深さ」を保存する傾向がある理由です。そのため、同じテーブルへの結合の量をフィルタリングして、より適切な量に制限することができます。
個人的には、定期的にデータを変更する場合:挿入/更新時にトリガーを構成する傾向があります。これにより、IDに基づいてノードの現在の「パス」が保存/キャッシュされます(たとえば、パスは「12/62/28/345」です)。 '、区切り文字/
間のすべてのステップ は正しい順序の親ノードの主キーです(345の親は28、28の親は62など))。したがって、次のように1つの結合でクエリを実行できます(/セパレータとして使用):
SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND j.id != o.id -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;