无限深度递归儿童

时间:2009-10-15 03:07:29

标签: php sql recursion hierarchy semantics

我有一个具有以下(相对)结构的单表:

foo_id, parent_foo_id, foo_name

我想用这些实体构建一个(有效)无限深度递归数组,然后将它们输出到树状菜单中。没有“parent_foo_id”的节点将被视为heirerchy的顶部,而所有连续的节点将显示为其父节点的子节点。

接近此类数据设计的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我曾经问过类似question一段时间。我的问题特别与SQLite有关,但由于SQLite语法往往是大多数其他SQL风格的最不常见的分母子集,它也适用于你。你可以随意忽略所有iPhone的东西,因为它非常无关紧要。

我希望这至少可以帮助你开始。

另外,请参阅this,了解我在使用不同实现样式进行实验时遇到的问题(及其解决方案)。

答案 1 :(得分:1)

在关系数据库中存储分层数据就我而言一直很麻烦。 递归方法(或邻接方法)迟早会遇到性能问题,其他方法难以实现。

我在nested set method取得了最大的成功,它考虑从完全不同的角度管理层次数据。尽管如此,很难实现和维护。 幸运的是Doctrine ORM有一个behavior to manage tree data使用这个算法,因此我建议查看这个树遍历方法背后的理论,然后可能看一下Doctrine代码来实现这个技术。