powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
7 сообщений из 32, страница 2 из 2
Период между сообщениями больше года.
Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
    #40117564
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
SET group_concat_max_len = 65535;#размер буфера для хранения извлеченных узлов
SET @a:='1';#узел предка, несколько узлов через запятую можно перечислять
SELECT group_concat(@a:=(SELECT group_concat(id) FROM test1 WHERE FIND_IN_SET(parent_id,@a))) as array
FROM test1
WHERE LENGTH(@a)>0


а как это перенести на 8++ ?
т.е. в оконные функции
...
Рейтинг: 0 / 0
Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
    #40117577
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MySQL 8 with recursive
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
### MySQL 8+
with recursive cte (id, name, parent_id) as (
  select     id,
             name,
             parent_id
  from       test1
  where      parent_id = 19 #узел предка
  union all
  select     p.id,
             p.name,
             p.parent_id
  from       test1 p
  inner join cte
          on p.parent_id = cte.id
)
select * from cte;
...
Рейтинг: 0 / 0
Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
    #40117596
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

спасибо, теперь в избранных,
по ссылке читал, но нашел там только для предков....
...
Рейтинг: 0 / 0
Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
    #40117652
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

да какой там избранное, это простой пример рекурсии,
в картинках здесь https://mariadb.com/kb/en/recursive-common-table-expressions-overview/
надо один раз наглядно понять, не так уж это сложно, с 2016 года уже как ввели
с "накопительным" путем
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with recursive cte (id, name, path, parent_id) as (
  select     id,
             name,
             CAST(id AS CHAR(222)) AS path, /* пишем в строку путь */
             parent_id
  from       test1
  where      parent_id = 1 /* узел предка */
  union all
  select     p.id,
             p.name,
             CONCAT(cte.path, ' -> ', p.id),
             p.parent_id
  from       test1 p
  inner join cte
          on p.parent_id = cte.id
)
select * from cte;

для предков меняется условие связи
...
Рейтинг: 0 / 0
Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
    #40117653
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
    #40117660
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

зачем плодить
в соседнем топике давали ссылку https://dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive-examples
Hierarchical Data Traversal
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
WITH RECURSIVE employee_paths (id, name, path) AS
(
  SELECT id, name, CAST(id AS CHAR(200))
    FROM employees
    WHERE manager_id IS NULL
  UNION ALL
  SELECT e.id, e.name, CONCAT(ep.path, ',', e.id)
    FROM employee_paths AS ep JOIN employees AS e
      ON ep.id = e.manager_id
)
SELECT * FROM employee_paths ORDER BY path;

...
Рейтинг: 0 / 0
Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
    #40117703
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

спасибо, но Гугл таксы штука что с одного браузера выдает почти одинаковы набор
поэтому не всегда удается найти нужное.....
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как вывести всех потомков узла дерева(AL) на MySQL если уровень растет динамически?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]