Это в MySQL 8.0.
Как использовать рекурсивный запрос для вычисления восходящего размера в каждом узле категории (тип = 1).
create table hierarchy (
name varchar(100),
location varchar(100),
type int,
size int,
parent_name varchar(100),
parent_location varchar(100)
) engine=InnoDB default charset=UTF8MB4;
truncate hierarchy;
insert into hierarchy values
('music', '/', 1, 0, NULL, NULL),
('classical', '/music', 1, 0, 'music', '/'),
('pop', '/music', 1, 0, 'music', '/'),
('bonjovi', /music/pop', 'pop', '/music'),
('its_my_life.mp3', '/music/pop/bonjovi', 2, 4092, 'bonjovi', '/music/pop'),
('bach', '/music/classical', 1, 'classical', '/music'),
('flute_e_min.mp3', '/music/classical/bach', 2, 1024, 'bach', '/music/classical'),
('sonata_no1_g.mp3, '/music/classical/bach', 2, 2048, 'bach', '/music/classical'),
select * from hierarchy;
Начиная с данного узла в иерархии, в этом примере musi c, как мне достичь размера каждой группы категорий прямого потомка (type = 1) путем рекурсивного суммирования размеров файлов (type = 2) до Иерархия?
name location parent_name parent_location total size
'music' '/' NULL NULL 7164
'classical' '/music' 'music' '/' 3072
'pop' '/music' 'music' '/' 4092
'bonjovi' '/music/pop' 'pop' '/music' 4092
'bach' '/music/classical' 'classical' '/music' 3072
...
Изначально узлы типа = 1 имеют значение по умолчанию. Запрос рекурсивно вычисляет, какой размер основан на последующем содержимом.
Для вашего удобства место для скрипки: https://www.db-fiddle.com/f/wozz4B6TEVmU95RPrQxvYd/0