Algumas marcas de banco de dados (por exemplo, Oracle, Microsoft SQL Server) suportam sintaxe SQL extra para executar "consultas recursivas", mas o MySQL não suporta nenhuma dessas soluções.
O problema que você está descrevendo é o mesmo que representar uma estrutura de árvore em um banco de dados SQL. Você só tem uma árvore longa e magra.
Existem várias soluções para armazenar e buscar esse tipo de estrutura de dados de um RDBMS. Veja algumas das perguntas a seguir:
- "Qual é a maneira mais eficiente/elegante de analisar uma tabela plana em uma árvore? "
- "É possível fazer uma consulta SQL recursiva ? "
Como você menciona que gostaria de limitar a "profundidade" retornada pela consulta, você pode conseguir isso ao consultar a lista desta forma:
SELECT * FROM mytable t1
LEFT JOIN mytable t2 ON (t1.next_id = t2.id)
LEFT JOIN mytable t3 ON (t2.next_id = t3.id)
LEFT JOIN mytable t4 ON (t3.next_id = t4.id)
LEFT JOIN mytable t5 ON (t4.next_id = t5.id)
LEFT JOIN mytable t6 ON (t5.next_id = t6.id)
LEFT JOIN mytable t7 ON (t6.next_id = t7.id)
LEFT JOIN mytable t8 ON (t7.next_id = t8.id)
LEFT JOIN mytable t9 ON (t8.next_id = t9.id)
LEFT JOIN mytable t10 ON (t9.next_id = t10.id);
Ele funcionará como melado, e o resultado voltará em uma linha (por lista vinculada), mas você obterá o resultado.