递归从父级获取所有子级

时间:2018-12-10 09:22:43

标签: mysql tree nested treeview parent-child

我在X级具有多个子级的MLM结构(不是二叉树营销) 因此表包括:parentid和managerid(子代)。 看起来像这张照片:

如您所见,经理1是主经理,其parentid = 0 每位经理可以生育0到XXX岁的孩子 对于经理1,经理X处于第4级(级别不受限制)

问题是:“如何计算所有managerid以获取确切的父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;

编辑: 因此,我正在寻找查询,该查询将返回所有parentid的managerid(不使用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个孩子 经理1005有13个孩子

我需要输入parentid = 1005(对于经理1005),对他的所有孩子进行计数并获得数字= 13 不要忘了parentid = 1005可能有不同级别的子级(从1到xxx无穷大)。我需要计算他所有子级上的所有子级(请参见上图,“经理2”)

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决我的问题。 第一个:使用WITH RECURSIVE(可从MySQL 8版本获得),或存储过程。 您可以在此处找到代码示例和所有其他内容:https://guilhembichot.blogspot.com/2013/11/with-recursive-and-mysql.html