php - 具有单个查询的递归类别?

标签 php mysql

我有一个包含文章和版 block 的网站, 每个部分都可以有一个父部分,只要他们喜欢 例如:

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

等..

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

Tnx 高级。

最佳答案

如果树不是太大,您可以使用一些巧妙的引用在 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 中进行递归查询快得多。

关于php - 具有单个查询的递归类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116330/

相关文章:

php - 为什么变量应该有 public 或 private 或 protect 但函数不应该在类中

javascript - Ajax在多个实例中的下拉效果

php - 为什么 debug_backtrace() 有时不包含行号?

php - 如何在没有指定行的情况下选择一列?

php - 从 HTML 表单向 MySQL 数据库插入多行

mysql - SQL SERVER (TSQL) 逆 DateDiff 的 SUM(SQL 或存储过程)

php - 如何返回 id 等于其他具有 Laravel 关系的表上的 id 的模型行?

sql - MYSQL:没有公共(public)值的两个表 SELECT

php - AngularJS 无法将数据插入 phpMyadmin (mySql)

php - 处理准备好的 select 语句没有返回的结果