【发布时间】:2012-04-04 06:23:00
【问题描述】:
我正在使用 PHP (CodeIgniter) 和 MySQL 为网站实现 MLM 树。我需要在数据库中实现二叉树。需要考虑以下几点:
对于每个节点,左子树中的子/节点数和右子树中的子/节点数中的最小值称为一对。对于每一对,一个节点获得 1 分 - 应该存储在数据库中(节点代表用户)
创建新节点时(无论在何处),可能会增加许多节点对。所以每当创建一个节点时,每个节点的点都应该更新(在适用时加一)
另一个限制是每天任何节点都不能超过 100 个点。
我还需要构建(在网页中显示)树。仅显示 4-5 个级别。
数据库可能有100000个节点
我发现主要有 4 种模型用于在 MySQL、PHP 中实现分层数据
- 邻接列表
- 路径枚举
- 嵌套集
- 闭包表
所以我想找到一种解决方案,可以减少插入开销并成功更新所有适用节点的点。
我已经尝试过邻接列表解决方案。
node ( id, parentid, leftChildId,rightChildId,leftCount,rightCount )
userStat(id,sdate,pairs,mlmIncome)
每次插入一个节点时,我都会向上并继续增加子计数。如果制作了新对,那么我也会增加该节点并增加点.. 我正在使用存储过程来做这些。
我选择这个解决方案而不是嵌套集的原因是: 对于每个插入的节点,Nested Set 需要更新的节点数总是大于邻接表。
虽然构建树的速度超过了插入。并且嵌套集在构造树方面更好..
我的方向正确吗?请帮忙!
提前谢谢!
【问题讨论】:
-
无法理解为什么这被否决了,似乎完全合理的问题! +1
-
thnx danp,你能帮我解决一下吗?
-
我正在codeigniter中实现闭包表层次结构,看看这段代码有用吗?
-
我只是想确定我的方法是不是最好的。感谢您的关注,我现在不需要代码。:-)
标签: php mysql codeigniter treeview binary-tree