Alcuni marchi di database (ad es. Oracle, Microsoft SQL Server) supportano una sintassi SQL aggiuntiva per eseguire "query ricorsive", ma MySQL non supporta tale soluzione.
Il problema che stai descrivendo è lo stesso della rappresentazione di una struttura ad albero in un database SQL. Hai solo un albero lungo e magro.
Esistono diverse soluzioni per archiviare e recuperare questo tipo di struttura di dati da un RDBMS. Consulta alcune delle seguenti domande:
- "Qual è il modo più efficiente/elegante per trasformare un tavolo piatto in un albero? "
- "È possibile fare una query SQL ricorsiva? "
Poiché dici che vorresti limitare la "profondità" restituita dalla query, puoi ottenerlo interrogando l'elenco in questo modo:
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);
Funzionerà come melassa e il risultato tornerà tutto su una riga (per elenco collegato), ma otterrai il risultato.