我遇到了一个问题,提出了一个在mysql中创建递归层次结构的解决方案,同时对结果进行汇总。这是保持简单的快速结构。
----------------------
id | name | parent_id
----------------------
1 | A | 0
2 | B | 1
3 | C | 1
4 | D | 2
5 | E | 2
6 | F | 3
7 | G | 3
我可以以php循环或mysql的方式成功递归创建此菜单:
A
-B
--D
--E
-C
--F
--G
但是,我这些ID引用了另一个表(联系人),这些是联系人的类型。问题是只有叶子才分配给联系人,但是我需要将总数汇总到每个级别。所以我可以去:
A=0
-B=0
--D=100
--E=100
-C=0
--F=200
--G=200
但是我需要的是将每个小节汇总起来并加到父级(无需大量查询)。实际上,这棵树的长度为几百个元素。这只是一个简化的版本,但我不知道如何回溯并最终得到:
A=600
-B=200
--D=100
--E=100
-C=400
--F=200
--G=200
我对MySQL或PHP实现感到满意。确实,任何让我朝正确方向迈进的东西都将不胜感激。
最佳答案
如果树中的元素数量足够小,则可以使用远程ID。
例如,最顶层的父级可以说id在100000-199999之间,此节点的第一个子级可以在100000-109999之间,第二个子级在110000-119999之间,等等。因此,您知道每个节点的子级id都在一定范围内。
当您要为特定节点计数时,只需检查id是否在该范围内。我希望这有帮助。