2013-10-26 2 views
0

У меня есть таблица 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 Query

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' 

Результат я получаю
корень
--Доборы
--Оно
---- Мужские одежды
---- Sarees
---- IT Hardware
---- IT Software
------ Люкс сари
- ---- веб-дизайн
------ Web Based Solution
Но я хочу, чтобы результат, как
корень
--Garments
---- Мужские одежды
---- Sarees
------ Люкс сари
--Оно
---- IT Hardware
---- IT Software
------ Веб-дизайн
------ Web Основанный на решении

+1

Это то, что вы должны обращаться в своем презентационном уровне. –

ответ

0

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

Смежные вопросы