使用PHP + MySQL实现二叉树

8
我正在使用PHP(CodeIgniter)和MySQL为网站实现MLM树。我需要在数据库中实现二叉树。需要考虑以下几点:
1. 对于每个节点,左子树中孩子/节点数量和右子树中孩子/节点数量的最小值称为一对。对于每一对,一个节点获得1分-应存储在数据库中(节点代表用户)。
2. 当创建新节点时(无论在哪里),可能会增加许多节点的配对。因此,每当创建节点时,应更新每个节点的分数(在适用时加1)。
3. 另一个限制是每天任何节点不能超过100分。
4. 我还需要构建(在网页上显示)这棵树。只需显示4-5个级别即可。
5. 数据库可能有100,000个节点。
我已经发现了主要的四种在MySQL、PHP中实现分层数据的模型:
1. 邻接列表
2. 路径枚举
3. 嵌套集
4. 闭包表
因此,我想找到一种解决方案,可以减少插入开销,并成功更新所有适用节点的分数。
我已经尝试了邻接列表解决方案。
node ( id, parentid, leftChildId,rightChildId,leftCount,rightCount ) 
userStat(id,sdate,pairs,mlmIncome)

每次插入一个节点,我向上移动并不断增加子节点数量。如果新的组合被创建,则也会进行增加,并增加点数。我使用存储过程执行这些操作。
我选择这种解决方案而非嵌套集的原因是:对于每个插入的节点,更新嵌套集所需更新的节点数始终多于邻接列表。
虽然构建树的速率比插入更快,嵌套集在构建树方面更加优秀。
我是否走在正确的方向?请帮忙!提前感谢!

不明白为什么这个问题被踩了,看起来完全合理啊!+1 - danp
谢谢Danp,你能帮我想个解决方案吗? - Shahed Khan
我正在CodeIgniter中实现Closure Table层次结构,看到这段代码有用吗? - danp
我只是想确认一下我的方法是否最好。谢谢你的关心,我现在不需要代码。:-) - Shahed Khan
1个回答

2

谢谢 Philip 的回复。实际上,在我提出这个问题之前,我已经阅读了这两篇文章。我无法决定要遵循哪种解决方案......嵌套集似乎更好,尽管我担心它可能会有插入开销。 - Shahed Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接