2013-12-04 5 views
0

Мой вопрос довольно прост, но я не знаю об ответе на него ...MySQL получить родительские/дочерние категории в порядке

У меня есть таблица со следующими полями и значениями:

Категории

ID | PARENT_ID | NAME 
--------------------- 
1 |  0  | Cat1 
2 |  0  | Cat2 
3 |  1  | Cat3 
4 |  1  | Cat4 
5 |  3  | Cat5 
6 |  2  | Cat6 
7 |  0  | Cat7 
..... 

В принципе, мне нужно получить данные только с помощью MySQL - отсортировано по Parent_id. Кроме того, для каждого имени мне нужно добавить знак «-» в зависимости от уровня.
В конце концов, он должен выглядеть следующим образом:

ID | PARENT_ID | NAME 
--------------------- 
1 |  0  | Cat1 
3 |  1  | -Cat3 
5 |  3  | --Cat5 
4 |  1  | -Cat4 
2 |  0  | Cat2 
6 |  2  | -Cat6 
7 |  0  | Cat7 

Я не знаю, как начать строить такой запрос - я думал заказать по parent_id, но он не будет работать.

Есть ли функция или способ, который я мог бы использовать для достижения этого? Любые намеки будут оценены по достоинству.

+0

Взгляните на этот сайт: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ в качестве отправной точки. Вы используете метод смежности. – AgRizzo

+0

@ AgRizzo - укажите это как ответ, чтобы я мог его принять. – CristiC

+0

На самом деле это не ответ (нет кода SQL) - его больше перенаправления :) Если вы разработаете решение, вы должны ответить на него сами. – AgRizzo

ответ

0

- на самом деле не знаю, почему, и что это может означать, но я думаю, что это будет делать то, что вы спрашиваете:

select ID,PARENT_ID,concat(substring('---------------',1,NAME),NAME) as NAME 
from table 
order by PARENT_ID 
  • обратите внимание, что при наличии более чем 15 «уровней» (или PARENT_ID> 15), вам нужно добавить еще «-».
+0

Я думаю, вы не поняли мою проблему. Мне нужно заказать их на основе PARENT_IDs - подумайте о отображении окна выбора со списком категорий и подкатегорий ... – CristiC

+0

просто добавил заказ PARENT_ID к вышеуказанному. – BWS

+0

Если вы заказываете PARENT_ID - вы получите мои результаты? Повторите попытку, так как строки не упорядочены так. Окончательный порядок задается уровнем, на котором находится категория. – CristiC

0

Попробуйте использовать функцию REPEAT SQL. С помощью которого вы можете сделать Выберите контакт (REPEAT ('-', parent_id), имя) из таблицы order by parent_id;

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