首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用单个查询的递归类别?

使用单个查询的递归类别?
EN

Stack Overflow用户
提问于 2010-06-25 15:39:48
回答 8查看 12.9K关注 0票数 14

我有一个网站的文章和部分,每个部分可以有一个父部分,因为他们喜欢,例如:

代码语言:javascript
复制
subject 1
 -subject 2 
 --subject 3
 -subject 4
 --subject 5
 --subject 6
 ---subject 7
subject 8
subject 9

等等。

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

Tnx处于高级状态。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-25 17:20:57

如果树不是太大,您可以使用一些巧妙的引用在PHP中简单地构建树。

代码语言:javascript
复制
$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中的递归查询快得多。

票数 27
EN

Stack Overflow用户

发布于 2010-06-25 15:41:50

这取决于您存储数据的方式。在MySQL.com上有一篇名为Managing Hierarchical Data in MySQL的好文章谈到了这一点。

票数 10
EN

Stack Overflow用户

发布于 2010-06-25 16:40:09

正如您所知道的,您可以在一个查询中获取一个数组中的所有类别:

代码语言:javascript
复制
$query = "SELECT `name`,`id` from `table`";

将其放入数组中,您可以使用一些嵌套循环来构建树。它不会很快,但很简单,而且比使用递归查询更快。此外,您可以缓存已构建的树,而不必每次都重新构建它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3116330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档