关于分层数据的问题

时间:2009-12-22 21:57:15

标签: mysql hierarchical-data

我正在阅读以下文章,http://articles.sitepoint.com/article/hierarchical-data-database/2关于“在数据库中存储分层数据”。

这是在讨论这些结构。 http://sitepointstatic.com/graphics/sitepoint_numbering.gifhttp://sitepointstatic.com/graphics/table02.gif

我不明白以下段落。这些是什么意思。

“每次从节点的子节点开始,都会将该节点的正确值添加到堆栈中。”

“当您完成显示节点时,您将从堆栈中删除其正确的值。如果计算堆栈中的元素,您将获得当前节点的级别。”< / EM>

我希望有人在可能的情况下以更简单的方式解释这些。

  

要显示树形结构,请注意儿童   应略微缩进   他们的父母。我们可以做到这一点   保持一堆正确的价值观。每   你从一个孩子开始的时间   节点,您添加正确的值   节点到堆栈。你知道的   该节点的孩子有权利   小于正确的价值   父母的价值,所以通过比较   当前节点的正确值   使用堆栈中的最后一个节点,   你可以看看你是否还在显示   那个父母的孩子。什么时候   你完成了一个节点的显示   从堆栈中删除其正确的值。   如果计算中的元素   堆栈,你会得到的水平   当前节点。

1 个答案:

答案 0 :(得分:2)

他们试图想出一种方法来使用嵌套集来按树中的级别缩进数据。

Food (1,12)
|
+--Fruit (2,11)
  |
  +--Red (3,6)
  | |
  | +--Cherry (4,5)
  |
  +--Yellow (7,10)
    |
    +--Banana (8,9)

因此,当您获取行时,将rgt数字推送到数组的末尾:

$right[] = $row['rgt'];

当您处理子项和子项时,此数组会增长。例如,当我们到达“Cherry”时,数组看起来像这样:

array(11, 6, 5)

只要我们沿着树的一个分支下降,其中的rgt值应该越来越少,因为孩子的rgt值总是小于其父rgt值。 }值。

我们处理的下一行是“黄色”,其rgt值为10.此值10 更大比数组中的最后一个值,这意味着我们不是再往下走一个分支,我们就在另一个分支上。我们需要从数组中弹出数字,直到10不再大于数组中的最后一个数字。

array(11, 6) // 10 is still greater than 6
array(11)    // 10 is not greater than 11, so stop

现在我们知道数组只包含当前行“黄色”的祖先。

树中的级别始终等于该数组中的元素数。