ルート項目を選択したいのですが、それは可能な限りパフォーマンスの高い子です。私はネストされたセット モデルを使用することを好みますが、今回のテーブル構造は隣接モデルに従っています。ネストされたセットと隣接モデルの詳細。
私は と を持ってdependencies-table
いitems-table
ます。
依存関係テーブル
dependency_id | item_id | child_id
1 | 1 | 4
2 | 2 | 5
3 | 4 | 7
4 | 7 | 3
5 | 9 | 3
6 | 1 | 2
品目表
item_id | name | info
1 | Item A | 1st Item
2 | Item D | 2nd Item
3 | Item C | 3rd Item
4 | Item D | 4th Item
5 | Item E | 5th Item
6 | Item F | 6th Item
SQL、最初に試す
# selecting children (non-recursive)
# result: 4, 2
SELECT
child_id AS id
FROM `dependencies_table`
WHERE item_id = 1
この SELECT 再帰が必要です。
望ましい出力
# children of item #1
dependency_id | item_id | child_id
1 | 1 | 4 // 1st level
6 | 1 | 2 // 1st level
2 | 2 | 5 // 2nd level, 1->2->5
このケースは非常に一般的なはずですが、今のところベストプラクティスを見つけることができなかったのではないかと思っています. 注意: これは MySQL であるため、CTE を使用できません。
この問題をどのように解決しますか?前もって感謝します!
編集:興味深いスレッドを見つけましたが、私の問題はまだ解決されていません。したがって、この質問を閉じないでください。
編集 2: これは興味深い PHP ソリューションですが、残念ながら私が実際に望んでいるものではありません。