![]() |
1
11
为此需要使用递归函数。 从技术上讲,有几种方法可以做到这一点,但递归实际上是最好的选择 . 以下是其工作原理的基本要点:
的性质和方法
|
![]() |
2
19
以下是“开发人员友好”版本的 一个查询 , 无递归 “解决这个问题。 SQL :
PHP :
您只需要了解$parent_stack变量的用法。 它是一个“后进先出”的堆栈(后进先出),维基百科文章中的图片价值一千字: http://en.wikipedia.org/wiki/LIFO_%28computing%29 当菜单选项有子选项时,我们将其父ID存储在堆栈中:
然后,我们立即更新$parent,使其成为当前菜单选项id:
循环其所有子选项后,我们可以返回到上一个级别:
这就是为什么我们将父ID存储在堆栈中的原因! 我的建议是:仔细考虑上面的代码片段,并理解它。 欢迎提问! 我在这种方法中看到的一个优点是,它消除了进入无限循环的风险,当使用递归时,这种情况可能发生。 |
![]() |
3
16
使用与您类似的数据库结构,可以使用 单一查询 和 没有递归 . 是-我重复一遍:
这是我一直使用的方法。 将代码粘贴到此处-完全正常: 跳到第67行,查看有趣的部分(“get_menu_html”)。 主回路从85号线开始。 有五个“可自定义”的HTML代码段:
(如果我不担心的话,代码可能会更干净 制表 ) 脚本末尾提供了用于创建和填充示例数据库的SQL。 你可以试着让我们知道你的想法。 |
![]() |
4
4
我建议您研究一下预先排序的树遍历。有一篇关于这个问题的文章在: Managing Hierarchical Data in MySQL 实际上,您将每个页面作为一个“节点”。每个节点都有对其父节点的引用。当您更改节点的布局(添加子节点、移动节点等)时,您将重新计算每个节点的“左”和“右”值(上面的文章详细解释了这一点,并链接到PHP中的源代码)。您最终得到的是能够非常快速地确定给定节点是任何其他节点的直接子节点还是间接子节点,以及获取给定节点的所有子节点。 |
![]() |
5
2
alt text http://i.imagehost.org/0934/product_hier.jpg http://pastie.org/969286
|
![]() |
6
1
您需要使用递归,但我的方法不同,我创建了一个类来单独处理每个菜单,然后查询结果,并根据父对象对单个对象中的每个元素进行分组,按级别组织,然后将所有对象合并为一个…检查Pastebin的完整代码 |
![]() |
7
0
我将使用递归函数。 我知道这和你的代码不完全一样,但是我认为如果你理解递归的话,你可以得到一般的概念。如果您不理解递归,请签出 http://en.wikipedia.org/wiki/Recursion_(computer_science)
|
![]() |
8
0
我是这样发现的,使用yii框架。
如果您还需要一个级别,可以将子数组中的另一个级别设置为
哦,当然,比较一下
|
![]() |
hello_programmers · Mysql从其他表输出一列 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |
![]() |
Popo · Sql查询:返回数据库中不可用的where条件 1 年前 |
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 1 年前 |
|
Kugelfisch · 用php为数据库加密数据 1 年前 |