0

を使用して 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_idnull、ルート要素を意味します。また、非環式であることを保証します。

行と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 はこれを効率的に処理できますか? それとも、独自のインデックスまたは補助テーブルを維持する必要がありますか?

4

1 に答える 1

0

私の知る限り、MySQL組み込みにはそのような機能はありません... Oracleには、必要なことを行う「階層クエリ」と呼ばれる機能があります...

MySQL では、「方法」はかなり複雑ですが、実装/シミュレートできます。非常に優れたウォークスルーについては、この記事を参照してください。

于 2012-09-09T15:06:33.137 に答える