【问题标题】:Question about Hierarchical data关于分层数据的问题
【发布时间】:2009-12-23 06:18:47
【问题描述】:

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

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

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

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

“当你显示完一个节点后,你从堆栈中移除它的正确值。如果你计算堆栈中的元素,你将得到当前节点的级别。”

如果可能的话,我希望有人以更简单的方式解释这些。

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

【问题讨论】:

  • 那篇文章中没有提到“嵌套集”这个短语,这很遗憾,因为这就是它所描述的方法。如果您尝试在谷歌上搜索“嵌套集”,您会发现更多关于它的信息。
  • 具体有什么不明白的?你知道什么是“堆栈”吗?如果你用“list”代替“stack”这个词,现在对你有意义吗?
  • “你将那个节点的正确值添加到堆栈中”如果我选择“红色”,即 (3, 6)。我在哪里添加 6?

标签: mysql hierarchical-data


【解决方案1】:

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

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 值。

我们处理的下一行是“Yellow”,它的 rgt 值为 10。这个值 10大于数组中的最后一个值,这意味着我们没有向下下降一个分支了,我们在另一个分支。我们需要从数组中弹出数字,直到 10 不再大于数组中的最后一个数字。

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

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

树中的层级总是等于该数组中元素的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2013-08-17
    相关资源
    最近更新 更多