构建数组以表示公司层次结构

时间:2011-06-12 13:31:59

标签: php mysql sql

假设我有以下定义表结构:

id(int),related_to(int),description(text

,该表包含类似于:

的数据
id   related_to     description
1        0          departmen1
2        1          section1
3        2          devision1
4        0          departmen2
5        4          section2
6        4          etc....

我需要一个SQL语句或PHP代码来表示单独的数组元素中的每个层次结构。

结果必须是

$data=array(
0=>'department1','section1','devision1'
2=>'departmen2','section2','devision2'
3=> 'departmen1','section3',.......
);

这样做的最佳方式是什么?

谢谢。

2 个答案:

答案 0 :(得分:3)

在PHP中使用树状结构的最佳方法是使用对象。可以找到一个很好的例子here

向树对象添加一个函数,该函数返回所需数组格式的子对象,并在子对象上调用相同的函数。通过对顶级对象进行一次函数调用,您将收到所需子格式的数组。有关递归函数的更多信息,请参阅Tree Traversal

答案 1 :(得分:1)

根据我的经验,嵌套集可以更好地解决这个问题。在应用程序级别使用递归函数会浪费大量的网络时间,尤其是在结构非常大的情况下。虽然使用它可能有点奇怪,但是一旦你有了操作嵌套集的函数,它们就变得易于使用了。

请参阅:Managing Hierarchical Data In MySQL

嵌套集可以处理无限深的树,并且可以在单个查询中返回具有父子关系的整个树。您还可以使用单个查询返回“沿袭”,而无需借助递归或应用程序排序。

从单个SQL查询中获取数据后,您可以轻松地将其排序到PHP应用程序中的通用树结构中以供显示或进一步处理。