WITH RECURSIVE struct AS (
SELECT
cs.*,
0 as level,
CAST(if(cs.parent_id IS NULL, '', cs.name) AS CHAR(65535)) fqpath
FROM structure cs
WHERE
cs.parent_id IS NULL
UNION ALL
SELECT
cs.*,
s.level + 1,
if(s.level = 0, cs.name, CONCAT_WS('|', cs.name, s.fqpath))
FROM structure cs
JOIN struct s ON cs.parent_id = s.id
)
SELECT *
FROM struct;
WITH RECURSIVE struct AS (
SELECT
cs.*,
CAST(cs.name AS CHAR(65535)) fqpath
FROM structure cs
-- WHERE cs.parent_id IS NULL
UNION ALL
SELECT
cs.*,
CONCAT_WS('|', s.fqpath, cs.name)
FROM struct s
JOIN structure cs ON cs.id = s.parent_id
)
SELECT *
FROM struct;
id | name | parent_id | fqpath |
11 | Название структуры | 10 | Название 1 дочерней структуры/Название структуры |
11 | Название структуры | 10 | Название 2 дочерней структуры/Название структуры |
11 | Название структуры | 10 | Название 3 дочерней структуры/Название структуры |
11 | Название структуры | 10 | Название 4 дочерней структуры/Название структуры |
Название структуры/Название родителя2/Название родителя 1/Название корня
cs.id = s.parent_id
на cs.parent_id = s.id
это не решит проблему полностью, я буду получать только одного родителя. strany.push([key, value['name'], value['img']]); // вот тут я собрал массив с флагами
{
"RU":[{
"gramm":[{
"Грамматика", "/icon1.png"
}],
"prav":[{
"Правописание", "/icon2.png"
}]
}],
"EN":[{
"gramm":{
"Грамматика", "/icon1.png"
}
}]
}
WHERE
`category_id` LIKE '12,%'
OR `category_id` LIKE '%, 12,%'
OR `category_id` LIKE '%, 12'
OR `category_id` = '12'
CAST(cs.name AS CHAR(65535)) fqpath
.Просто это я свои эксперименты не убрал за собой )