O MySQL não suporta consultas recursivas, portanto, se um filho pode ter filhos, não há como formular tal consulta. Caso contrário, esta consulta deve retornar as linhas na ordem que você precisa:
SELECT * FROM tablename
ORDER BY
CASE WHEN parent_id=0 THEN id ELSE parent_id END,
id
Por favor, veja violino aqui . O truque é ordenar as linhas por
id
se for pai ou por parent_id
se for filho, e então por id
.