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

AFAIK 在内置的 MySQL 中没有这样的功能...... Oracle 有一个名为“分层查询”的功能,它可以满足您的需求......

在 MySQL 中,您可以实现/模拟它,尽管“如何”相当复杂 - 要获得非常好的演练,请参阅这篇文章

于 2012-09-09T15:06:33.137 回答