当前位置: 首页 > 面试题库 >

单一查询的递归类别?

谭富
2023-03-14
问题内容

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

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中进行递归查询要快得多。



 类似资料:
  • 问题内容: 我目前在理解和编写递归查询时遇到一些麻烦。我知道递归查询用于搜索信息层次结构,但是我还没有找到一个可以遍历层次结构的简单在线解决方案。例如,假设我有一个对家谱建模的关系: 如果我想编写一个遍历此家谱的递归查询,收集所有父母直到出生,我该如何处理? 提前致谢。 问题答案: 您可以使用子句。 在您的情况下,SQL可能类似于:

  • 问题内容: 我最近才刚刚开始自学SQL,并且能够将各种教程中所需的几乎所有内容组合在一起,但这使我无法自拔。我们有一个表格,其中包含我们产品的所有物料清单信息。我只需要其中的4列-PPN_I,CPN_I,QUANTITY_I,BOMNAME_I- 分别是项目编号,原材料编号,数量和BOMName。许多BOM都包含子装配体。我需要一个结果集,其中列出了BOM表的所有组件,无论级别如何。我很确定我需要

  • 问题内容: 我有一组按层次结构组织的数据,应该可以增长到任意大小。我需要检索整个树,但是我无法弄清楚如何仅使用SQL来完成。我当前的解决方案是创建一个临时表,并使用递归函数依次查询树的分支,然后将结果存储在临时表中,随后我再次对其进行查询以产生所需的结果。 我的问题是,从本质上讲,我正在执行的联接正确吗?构造一个中间表,然后查询结果。似乎应该有一种使用联接的方法,但是MySQL文档仅涵盖检索有限深

  • 问题内容: JPA 2是否具有运行递归查询的任何机制? 这是我的情况:我有一个实体E,其中包含一个整数字段x。它还可能具有通过@OneToMany映射的E类型的子代。我想做的是通过主键找到一个E,并获取其x的值以及所有后代的x值。有没有办法在单个查询中执行此操作? 我正在使用Hibernate 3.5.3,但我不希望在Hibernate API上没有任何明确的依赖关系。 编辑:根据这一项目,Hib

  • 问题内容: 我对PLSQL的更高级主题还是陌生的,因此希望有人可以帮助我。 问题: 我有一个表,其中包含管理员和用户之间发送的消息。该表在同一表的message_id字段中具有带FK的message_parent:如果填充了该字段,则意味着该消息是作为对先前消息的答复而发送的。我需要选择属于同一对话的所有消息并显示它们。可以通过单个查询完成此操作,还是需要一个过程来处理这种逻辑?据我了解,它必须是

  • 问题内容: 我有下表: 我想让所有行都回溯,直到不再有parentID为止。因此, “ .... WHERE id = 5” 会给我: 问题答案: 您正在使用邻接表模型来组织层次结构数据。这种递归操作很困难的事实实际上是该模型的一个主要缺点。 一些DBMS(例如SQL Server 2005,Postgres 8.4和Oracle 11g)支持使用带有关键字的常用表表达式进行递归查询。 对于MyS