递归从 parent 获取所有孩子
Recursive get all childs from parent
我在 X-level 中有多个 child 的传销结构(不是二叉树营销)
所以table包括:parentid和managerid(child)。
这张照片看起来像:
可以看到,Manager 1是parentid=0的主Manager
每个经理可以有 child 从 0 到 XXX
经理1,经理X在他的第4级(级别不限)
所以问题是:"How can I coun all managerid for exact parent id"?即对于经理 2(其中有 3 个级别和 6 个经理)或经理 6(其中有 2 个级别和 5 个经理)。
数据库:MySql
CREATE TABLE `accounts` (
`id` int(11) NOT NULL,
`managerid` varchar(32) COLLATE utf8_unicode_ci DEFAULT '',
`parentid` varchar(32) COLLATE utf8_unicode_ci DEFAULT '',
`name` varchar(256) COLLATE utf8_unicode_ci DEFAULT '',
`regdate` date DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
编辑:
因此,我正在寻找将 return 所有 managerid 用于 parentid 的查询(不使用 mysql 存储过程)。
即简单的 INSERT
id,managerid,parentid,name,regdate
1,1000,0,name1,2018-12-10
2,1001,1000,name2,2018-12-10
3,1002,1001,name3,2018-12-10
4,1003,1002,name4,2018-12-10
5,1004,1003,name5,2018-12-10
6,1005,1004,name6,2018-12-10
7,1006,1005,name7,2018-12-10
8,1007,1006,name8,2018-12-10
9,1008,1007,name9,2018-12-10
10,1009,1008,name10,2018-12-10
11,1010,1009,name11,2018-12-10
12,1011,1010,name12,2018-12-10
13,1012,1011,name13,2018-12-10
14,1013,1012,name14,2018-12-10
15,1014,1013,name15,2018-12-10
16,1015,1014,name16,2018-12-10
17,1016,1015,name17,2018-12-10
18,1017,1016,name18,2018-12-10
19,1018,1017,name19,2018-12-10
所以在这个例子中 manager=1000 有 18 childs
经理 1005 有 13 childs
我需要输入 parentid=1005(经理 1005)计算他所有的 childs 并得到 number = 13
不要忘记 parentid=1005 可能在不同级别(从 1 到 xxx 无穷大)上有 childs。我需要计算他所有级别的所有 child(见上图,"manager 2")
有两种方法可以解决我的问题。
第一个:使用 WITH RECURSIVE(可从 MySQL 8 版本获得),或使用存储过程。
您可以在此处找到代码示例和所有其他内容:https://guilhembichot.blogspot.com/2013/11/with-recursive-and-mysql.html
我在 X-level 中有多个 child 的传销结构(不是二叉树营销) 所以table包括:parentid和managerid(child)。 这张照片看起来像:
可以看到,Manager 1是parentid=0的主Manager 每个经理可以有 child 从 0 到 XXX 经理1,经理X在他的第4级(级别不限)
所以问题是:"How can I coun all managerid for exact parent id"?即对于经理 2(其中有 3 个级别和 6 个经理)或经理 6(其中有 2 个级别和 5 个经理)。
数据库:MySql
CREATE TABLE `accounts` (
`id` int(11) NOT NULL,
`managerid` varchar(32) COLLATE utf8_unicode_ci DEFAULT '',
`parentid` varchar(32) COLLATE utf8_unicode_ci DEFAULT '',
`name` varchar(256) COLLATE utf8_unicode_ci DEFAULT '',
`regdate` date DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
编辑: 因此,我正在寻找将 return 所有 managerid 用于 parentid 的查询(不使用 mysql 存储过程)。 即简单的 INSERT
id,managerid,parentid,name,regdate
1,1000,0,name1,2018-12-10
2,1001,1000,name2,2018-12-10
3,1002,1001,name3,2018-12-10
4,1003,1002,name4,2018-12-10
5,1004,1003,name5,2018-12-10
6,1005,1004,name6,2018-12-10
7,1006,1005,name7,2018-12-10
8,1007,1006,name8,2018-12-10
9,1008,1007,name9,2018-12-10
10,1009,1008,name10,2018-12-10
11,1010,1009,name11,2018-12-10
12,1011,1010,name12,2018-12-10
13,1012,1011,name13,2018-12-10
14,1013,1012,name14,2018-12-10
15,1014,1013,name15,2018-12-10
16,1015,1014,name16,2018-12-10
17,1016,1015,name17,2018-12-10
18,1017,1016,name18,2018-12-10
19,1018,1017,name19,2018-12-10
所以在这个例子中 manager=1000 有 18 childs 经理 1005 有 13 childs
我需要输入 parentid=1005(经理 1005)计算他所有的 childs 并得到 number = 13 不要忘记 parentid=1005 可能在不同级别(从 1 到 xxx 无穷大)上有 childs。我需要计算他所有级别的所有 child(见上图,"manager 2")
有两种方法可以解决我的问题。 第一个:使用 WITH RECURSIVE(可从 MySQL 8 版本获得),或使用存储过程。 您可以在此处找到代码示例和所有其他内容:https://guilhembichot.blogspot.com/2013/11/with-recursive-and-mysql.html