Mysql-запрос к отступом и группировать все дочерние элементы

У меня есть таблица mysql, подобная этой

id Category parent
2 Garments 12
3 Gents Garments 2
4 Sarees 2
5 Bridal Sarees 4
6 IT 12
7 IT Hardware 6
8 IT Software 6
9 Web Design 8
10 Web Based Solution 8
11 E-Commerce Solution 9
12 root NULL

Использование запроса mysql

SELECT t1.category AS lev1, t2.category as lev2, t3.category as lev3, 
t4.category as lev4
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root';

Я могу получить этот результат

lev1 lev2 lev3 lev4
root Garments Gents Garments NULL
root Garments Sarees Bridal Sarees
root IT IT Hardware NULL
root IT IT Software Web Design
root IT IT Software Web Based Solution

Теперь я не смог найти способ получить значения в одном столбце в дереве, подобном структуре. пример

root
--Garments
----Gents Garments
----Sarees
--IT
----IT Hardware
----IT Software
------Web Design
------Web Based Solution

Вопрос изменен с использованием следующего запроса:

Я частично добился вышеуказанного результата, но сталь нуждается в правильной группировке, используя следующий запрос

SELECT distinct t1.category AS category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root' 
union
SELECT distinct concat('--', t2.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root' 
union

SELECT distinct concat('----', t3.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root' 
union
SELECT distinct concat('------', t4.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'

Результат, который я получаю корень --Garments --IT ----Gents Одежда ----Sarees - --IT Аппаратное обеспечение - --IT Программное обеспечение ------Bridal Sarees ------Web Дизайн Решение на основе CN07 Но я хочу, чтобы результат корень --Garments ----Gents Одежда ----Sarees ------Bridal Sarees --IT - --IT Аппаратное обеспечение - --IT Программное обеспечение ------Web Дизайн Решение на основе CN07

1 ответ

Если бы вы могли изменить способ представления иерархии на транзитивную таблицу закрытия, вы могли бы воспользоваться несколькими прошлыми ответами, которые я дал. Тема заключалась в том, как управлять сортировкой вывода запроса так же, как описано выше.

licensed under cc by-sa 3.0 with attribution.