Рекурсивно получить всех детей от родителя - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть структура MLM с несколькими дочерними объектами на уровне X (не маркетинг двоичного дерева). Итак, таблица состоит из: parentid и managerid (дочерний элемент).На этом рисунке это выглядит так:

image

Как видите, менеджер 1 - главный менеджер с parentid = 0. У каждого менеджера может быть ребенок от 0 до XXX для менеджера 1,Менеджер X находится на своем 4-м уровне (уровни не ограничены)

Итак, вопрос: «Как я могу считать весь managerid для точного идентификатора родителя»?т. е. для менеджера 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;

РЕДАКТИРОВАТЬ:Поэтому я ищу запрос, который вернет весь 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), подсчитать всех его детей иget number = 13 Не забывайте, что parentid = 1005 может иметь детей на разных уровнях (от 1 до xxx бесконечности).Мне нужно сосчитать всех его детей на всех его уровнях (см. Прикрепленное изображение выше, «менеджер 2»)

1 Ответ

0 голосов
/ 14 декабря 2018

Есть 2 способа решения моей проблемы.Первый: используйте WITH RECURSIVE (доступно из версии MySQL 8) или хранимую процедуру.Вы можете найти примеры кода и все остальное здесь: https://guilhembichot.blogspot.com/2013/11/with-recursive-and-mysql.html

...