2015-10-28 2 views
0

Я искал такие вопросы, и хотя многие из них подобны, не отвечают точно, мои вопросы и запросы не работают.MySQL Get Parent With Child Rows Together

Предположим, что мы имеем следующую таблицу

id  category_name  parent_id 
------------------------------------ 
1  test    0 
2  test1    0 
3  new_cat   1 
4  new_catx   2 
5  cat5    1 

Я хочу SQL-запрос, где выход будет как этот

id  category_name  parent_id 
------------------------------------ 
1  test    0 
3  new_cat   1 
5  cat5    1 
2  test1    0 
4  new_catx   2 

В то результаты запроса сортируются на основе parent_id. parent_id = 0 - это корневая категория, затем ребенок следует за ним, а затем снова родитель с его дочерним элементом. и т.д.

ответ

2

Это будет работать для дерева 1 уровня, то есть для дерева, содержащего только родителей и их детей:

SELECT * 
FROM mytable 
ORDER BY CONCAT(IF(parent_id=0, '', parent_id), id) 

Demo here

0

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

-структуру
id category_name 
--------------------- 
1  test 
2  test1 
3  new_cat 
4  new_catx 
5  cat5 

... и есть таблица родительского отображения, например, так:

id parent_id 
--------------------- 
3  1 
4  2 
5  1 

Тогда вы просто изменить отличный запрос Йоргос Betsos' следующим образом:

select t.id, t.category_name, p.parent_id 
from testtable t left outer join parents p 
    on t.id = p.id 
ORDER BY CONCAT(IF(p.parent_id is null, '', p.parent_id), t.id);