隣接リストモデルを使用して階層情報を格納するテーブルがあります。(自己参照キーを使用します-以下の例。この表は見覚えがあるかもしれません):
category_id name parent
----------- -------------------- -----------
1 ELECTRONICS NULL
2 TELEVISIONS 1
3 TUBE 2
4 LCD 2
5 PLASMA 2
6 PORTABLE ELECTRONICS 1
7 MP3 PLAYERS 6
8 FLASH 7
9 CD PLAYERS 6
10 2 WAY RADIOS 6
上記のデータをこのようなものに「フラット化」するための最良の方法は何ですか?
category_id lvl1 lvl2 lvl3 lvl4
----------- ----------- ----------- ----------- -----------
1 1 NULL NULL NULL
2 1 2 NULL NULL
6 1 6 NULL NULL
3 1 2 3 NULL
4 1 2 4 NULL
5 1 2 5 NULL
7 1 6 7 NULL
9 1 6 9 NULL
10 1 6 10 NULL
8 1 6 7 8
各行は、 (各リーフノードだけでなく)各ノードの行があることを除いて、階層を通る1つの「パス」です。category_id列は現在のノードを表し、「lvl」列はその祖先です。現在のノードの値も、右端のlvl列にある必要があります。lvl1列の値は常にルートノードを表し、lvl2の値は常にlvl1の直接の子孫を表します。
可能であれば、この出力を生成する方法はSQLであり、n層階層で機能します。