我正在使用 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 可以有效地处理这个问题,还是我需要维护自己的索引或辅助表?