1

次のように、自分自身を参照するテーブルがあります。

CREATE TABLE Foo (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
parent INT NULL,
name VARCHAR (30) NOT NULL,
FOREIGN KEY (parent) REFERENCES Foo(id) ON DELETE CASCADE);

サンプルデータ:

id   parent name
1    NULL   a
2    NULL   b
3    1      a1
4    1      a2
5    3      a1x
6    3      a2x

特定の行の先祖と子孫をリストするクエリを書きたいです。

CALL find_ancestors('a1x')

戻ります

id name
3  a1
1  a

CALL find_descendants('a')

戻ります

id name
3  a1
5  a1x

これらのストアド プロシージャを MySQL 5 用に記述するにはどうすればよいですか? ありがとう


報奨金のボーナス質問:また、返された行のソースからの距離を選択し、最大距離パラメーターをプロシージャーに渡します。

CALL find_ancestors('a1x')

戻ります

id name distance
3  a1   1
1  a    2

CALL find_ancestors_bounded('a1x',1)

戻ります

id name distance
3  a1   1
4

1 に答える 1