mysql - 递归从父级获取所有子级

标签 mysql tree nested treeview parent-child

我有 X 级别的具有多个子级的 MLM 结构(不是二叉树营销) 所以表由:parentid 和 managerid(子)组成。 它看起来像这张图片:

如您所见,经理 1 是主经理,parentid=0 每个经理可以有从 0 到 XXX 的 child 对于经理 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个 child 经理 1005 有 13 个 child

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

最佳答案

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

关于mysql - 递归从父级获取所有子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53702646/

相关文章:

Python:嵌套循环的问题。想要多次运行随机变量并对结果求平均值......

java - java中的日期类型填充MySQL数据库

MySQL Query 选择上周的数据?

php - 在从 mysql/php 加载的表单上触发 AJAX 函数

关于存储过程的 Mysql 语法错误

recursion - clojure中的深度优先树遍历累积

arrays - Cypress 拦截嵌套数组和对象并断言其值

Java 泛型树遍历

tree - 使用搜索找到树中最深的节点,然后移动它

iphone - 如何从 UIScrollView 窃取触摸?