假设我有以下定义表结构:
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',.......
);
这样做的最佳方式是什么?
谢谢。
答案 0 :(得分:3)
在PHP中使用树状结构的最佳方法是使用对象。可以找到一个很好的例子here。
向树对象添加一个函数,该函数返回所需数组格式的子对象,并在子对象上调用相同的函数。通过对顶级对象进行一次函数调用,您将收到所需子格式的数组。有关递归函数的更多信息,请参阅Tree Traversal。
答案 1 :(得分:1)
根据我的经验,嵌套集可以更好地解决这个问题。在应用程序级别使用递归函数会浪费大量的网络时间,尤其是在结构非常大的情况下。虽然使用它可能有点奇怪,但是一旦你有了操作嵌套集的函数,它们就变得易于使用了。
请参阅:Managing Hierarchical Data In MySQL
嵌套集可以处理无限深的树,并且可以在单个查询中返回具有父子关系的整个树。您还可以使用单个查询返回“沿袭”,而无需借助递归或应用程序排序。
从单个SQL查询中获取数据后,您可以轻松地将其排序到PHP应用程序中的通用树结构中以供显示或进一步处理。