を使用して MySQL 5.5
います。次のような「N フォレスト」構造を持つ SQL テーブルがあるとします。
create table foo
(
id int not null primary key,
parent_id int,
bar varchar(255),
foreign key (parent_id) references foo (id)
)
である場合parent_id
はnull
、ルート要素を意味します。また、非環式であることを保証します。
行とid
@x
そのすべての子孫 (つまり、ID @x を持つ行を含むセットと、このセットにparent_idを持つ行を再帰的に含む) を選択して、事前に並べ替えます。
select * from foo where parent_id=DescendantOf(@x) sort by Preorder
どの SQL ステートメントを使用できますか? (必要に応じてテーブル構造を変更できます)
また、特定の要素のルート ID を見つけたいと思います。
select RootOf(@x) from foo
どうやってやるの?
MySQL はこれを効率的に処理できますか? それとも、独自のインデックスまたは補助テーブルを維持する必要がありますか?