【问题标题】:Binary Tree Using PHP + MySQL使用 PHP + MySQL 的二叉树
【发布时间】:2012-04-04 06:23:00
【问题描述】:

我正在使用 PHP (CodeIgniter) 和 MySQL 为网站实现 MLM 树。我需要在数据库中实现二叉树。需要考虑以下几点:

  1. 对于每个节点,左子树中的子/节点数和右子树中的子/节点数中的最小值称为一对。对于每一对,一个节点获得 1 分 - 应该存储在数据库中(节点代表用户)

  2. 创建新节点时(无论在何处),可能会增加许多节点对。所以每当创建一个节点时,每个节点的点都应该更新(在适用时加一)

  3. 另一个限制是每天任何节点都不能超过 100 个点。

  4. 我还需要构建(在网页中显示)树。仅显示 4-5 个级别。

  5. 数据库可能有100000个节点

我发现主要有 4 种模型用于在 MySQL、PHP 中实现分层数据

  1. 邻接列表
  2. 路径枚举
  3. 嵌套集
  4. 闭包表

所以我想找到一种解决方案,可以减少插入开销并成功更新所有适用节点的点。

我已经尝试过邻接列表解决方案。

node ( id, parentid, leftChildId,rightChildId,leftCount,rightCount ) 
userStat(id,sdate,pairs,mlmIncome)

每次插入一个节点时,我都会向上并继续增加子计数。如果制作了新对,那么我也会增加该节点并增加点.. 我正在使用存储过程来做这些。

我选择这个解决方案而不是嵌套集的原因是: 对于每个插入的节点,Nested Set 需要更新的节点数总是大于邻​​接表。

虽然构建树的速度超过了插入。并且嵌套集在构造树方面更好..

我的方向正确吗?请帮忙!

提前谢谢!

【问题讨论】:

  • 无法理解为什么这被否决了,似乎完全合理的问题! +1
  • thnx danp,你能帮我解决一下吗?
  • 我正在codeigniter中实现闭包表层次结构,看看这段代码有用吗?
  • 我只是想确定我的方法是不是最好的。感谢您的关注,我现在不需要代码。:-)

标签: php mysql codeigniter treeview binary-tree


【解决方案1】:

这个博客可能会帮助你managing hierarchy data

您的问题听起来最熟悉的可能是Modified Preorder Tree Traversal

【讨论】:

  • 感谢菲利普您的回复。实际上,在问这个问题之前,我已经阅读了这两篇文章。我无法决定要遵循的解决方案.....嵌套集对我来说似乎更好,尽管我担心它的插入开销。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2015-06-10
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多