【发布时间】:2020-08-25 20:37:03
【问题描述】:
我有一个表,其中包含 3 列 id,name and parent_id 代表类别。根类别(没有父母的类别)的 parent_id 为 0。所有其他类别的 parent_id 作为其直接父母的 id。类别的深度没有限制,我的意思是一个类别可以比根类别低 3,4 甚至 10 级。我现在需要的是一个 PHP 多维数组,其中包含第一级的所有根类别,然后是下一级的直接子类别,每个子类别在其父类别下,以及它们下的子类别 1水平下降。所以它是一个tree like structure.,树中可以有很多层
我不需要确切的代码,但需要一个想法。一个这样的想法是使用选择查询获取所有根类别,然后为每个根查询触发选择查询以递归地获取其子类别等,但这将是太多的选择查询。
或者如果我知道我的表格最多可以包含 300 行,我该怎么做
$categories=GetResultAsArray(select * from categories);
现在操作内存中的 $categories 数组以获得所需的树。
【问题讨论】:
-
我认为您的两个想法都很好,并且都受到您拥有的数据行数的限制。性能有多少考虑?考虑缓存结果树?您还可以通过对每个查询进行一次自联接来将 sql 查询的数量减半 - 意思是让所有的父母和他们的孩子都深入一层。
-
是否需要每次都获取完整的树?
-
@andho 不是每次都完整的树,但是是的,经常需要某个根类别的所有孩子
标签: php mysql recursion hierarchical-data