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.Просто это я свои эксперименты не убрал за собой )