我有一个网站的文章和部分,每个部分可以有一个父部分,因为他们喜欢,例如:
subject 1
-subject 2
--subject 3
-subject 4
--subject 5
--subject 6
---subject 7
subject 8
subject 9
等等。
现在,我想递归地获取它们,那么通过php和mysql最有效的方法是什么呢?
Tnx处于高级状态。
发布于 2010-06-25 17:20:57
如果树不是太大,您可以使用一些巧妙的引用在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中的递归查询快得多。
发布于 2010-06-25 15:41:50
这取决于您存储数据的方式。在MySQL.com上有一篇名为Managing Hierarchical Data in MySQL的好文章谈到了这一点。
发布于 2010-06-25 16:40:09
正如您所知道的,您可以在一个查询中获取一个数组中的所有类别:
$query = "SELECT `name`,`id` from `table`";
将其放入数组中,您可以使用一些嵌套循环来构建树。它不会很快,但很简单,而且比使用递归查询更快。此外,您可以缓存已构建的树,而不必每次都重新构建它。
https://stackoverflow.com/questions/3116330
复制相似问题