Если ваша версия mysql поддерживает cte
, вы можете попробовать CTE Recursion сделать это.
Схема (MySQL v8.0)
CREATE TABLE Categories(
id INT,
parent_id INT,
title VARCHAR(50)
);
INSERT INTO Categories VALUES (1,null,'t1');
INSERT INTO Categories VALUES (2,1 ,'t2');
INSERT INTO Categories VALUES (3,1 ,'t3');
INSERT INTO Categories VALUES (4,2 ,'t4');
INSERT INTO Categories VALUES (5,4 ,'t5');
INSERT INTO Categories VALUES (6,null,'t6');
Запрос № 1
WITH RECURSIVE cte1 AS (
SELECT id,parent_id,title
FROM Categories
where title = 't5'
UNION ALL
SELECT cte1.id,c.parent_id,c.title
FROM cte1 INNER JOIN Categories c
on c.id = cte1.parent_id
)
SELECT id,GROUP_CONCAT(title separator '->') result
FROM cte1
GROUP BY id;
| id | result |
| --- | -------------- |
| 5 | t5->t4->t2->t1 |
Просмотр на БД Fiddle