LTREE
你几乎已经走上正轨了。您几乎偶然发现了在数据库中存储分层数据的“LTREE”系统。您只需要稍作修改即可。就这样。
您的表格可能如下所示:
CREATE TABLE Table1
(`id` int, `parent_id` int, `name` varchar(13),
`path` char(10),
`money` int)
;
您的数据可能如下所示。
(1, 0, 'company 1', '1', 10),
(2, 1, 'child 1', '1.1', 10),
(3, 2, 'child 2', '1.1.1', 10),
(4, 1, 'child 3', '1.2', 10,),
(4, 1, 'company 2', '2', 10),
(4, 1, 'child 2.1', '2.1', 10)
路径列有助于识别哪家公司是另一家公司的子公司。请注意,您实际上并不需要allmoney
柱子。这是动态生成的。
那么你如何找到属于第一家公司的所有资金呢?
select sum(money) from Table1 where path >= '1' and path < '2'
请注意,在我们创建的结构中,child1 是 child2 的父级。那么我们如何找到 child1 的所有钱呢?
select sum(money) from Table1 where path >= '1.1' and path < '1.2'
只有一次查询,没有递归。
MPTT
获取分层数据的另一种流行方法是使用修改的前序树遍历。有一篇很棒的文章站点点 https://www.sitepoint.com/hierarchical-data-database-2/多年来,它解释了如何通过大量示例代码来完成此操作。