MySQL nie obsługuje zapytań rekurencyjnych, więc jeśli dziecko może mieć dzieci, nie ma możliwości sformułowania takiego zapytania. W przeciwnym razie to zapytanie powinno zwrócić wiersze w wymaganej kolejności:
SELECT * FROM tablename
ORDER BY
CASE WHEN parent_id=0 THEN id ELSE parent_id END,
id
Zobacz skrzypce tutaj
. Sztuką jest uporządkowanie wierszy według id
jeśli jest rodzicem lub przez parent_id
jeśli jest dzieckiem, a następnie przez id
.