Получить иерархию parent-child из таблицы привязки SQL

У меня есть таблица mysql, структурированная таким образом (удалены другие столбцы, не относящиеся к вопросу):

id parent_id
----------- -----------
1 0 
2 0 
3 0 
4 3 
5 2
6 1
7 1

"Родитель" - это строка, которая имеет parent_id = 0.

Я хотел бы знать, есть ли способ сформулировать запрос, чтобы MySQL выводил строки с каждым ребенком сразу после своих родителей?

Предполагаемый результат

id parent_id
----------- -----------
1 0 
6 1 
7 1 
2 0 
5 2 
3 0 
4 3

Спасибо за ваше время.

1 ответ

MySQL не поддерживает рекурсивные запросы, поэтому, если у ребенка могут быть дочерние элементы, нет способа сформулировать такой запрос. В противном случае этот запрос должен возвращать строки в том порядке, в котором вы нуждаетесь:

SELECT * FROM tablename
ORDER BY
 CASE WHEN parent_id=0 THEN id ELSE parent_id END,
 id

Пожалуйста, смотрите здесь. Хитрость заключается в том, чтобы заказать строки по id если он один из родителей или parent_id если это ребенок, а затем id.

licensed under cc by-sa 3.0 with attribution.