Posiadam tabelę z samozłączeniem posiada dwie kolumny - ID oraz ROOT
jest to struktura drzewa w bazie danych
Napisałem procedurę składowaną, która przyjmie ID i ma zwrócić wszystkie nadrzędne rekordy w bazie danych
Odwołałem się w zapytaniu do samego CTE rekurencyjnie jednak procedura da się wykonać, jednak nic się nie dzieje.
Wiem, że MySQL to nie MSSQL lecz czy można się odwołać w CTE samo do siebie?
Wzorowałem się na: https://blog.zajonc.pl/dwa-spojrzenia-na-rekurencje-w-t-sql/
Problem został rozwiązany jednak implementacja jest zbyt złożona
https://stackoverflow.com/questions/3812621/handling-tree-in-a-mysql-procedure
Cała implementacja drzewa jest w
http://moinne.com/blog/ronald/mysql/manage-hierarchical-data-with-mysql-stored-procedures
CREATE TABLE `articles_categories`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`root` int(11),
PRIMARY KEY(`id`),
FOREIGN KEY (`root`) REFERENCES `articles_categories`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `articles_categories`(`id`,`root`) VALUES
(1,NULL),
(2,NULL),
(3,NULL),
(4,NULL),
(5,3);
DROP PROCEDURE IF EXISTS `get_category_tree`;
DELIMITER $$
create procedure `get_category_tree`(IN `id_input` INT(11))
BEGIN
WITH `CT0` as
(
select `id`, `root`, 0 as `level`
from `articles_categories`
where `id`= `id_input`
UNION ALL
select `articles_categories`.`id`, `articles_categories`.`root`, (`level`+1) as `level`
from `articles_categories` as `p`
join `CT0` on `CT0`.`root`=`articles_categories`.`id`
)
select * from `CT0`;
END $$