一尘不染

单一查询的递归类别?

mysql

我有一个包含文章和版块的网站,每个版块都可以有一个父版块,例如:

subject 1
 -subject 2 
 --subject 3
 -subject 4
 --subject 5
 --subject 6
 ---subject 7
subject 8
subject 9

等等..

现在,我想递归地获取它们,最有效的方法是通过php和mysql吗?

先进的Tnx。


阅读 226

收藏
2020-05-17

共1个答案

一尘不染

如果树不是太大,则可以使用一些聪明的引用在PHP中构建树。

$nodeList = array();
$tree     = array();

$query = mysql_query("SELECT category_id, name, parent FROM categories ORDER BY parent");
while($row = mysql_fetch_assoc($query)){
    $nodeList[$row['category_id']] = array_merge($row, array('children' => array()));
}
mysql_free_result($query);

foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);

这将为您$tree提供带有相应children-slot 子级的树结构。

我们已经用相当大的树(> 1000项)完成了此操作,它非常稳定并且比在MySQL中进行递归查询要快得多。

2020-05-17