Mysql
 sql >> Database >  >> RDS >> Mysql

Recupero dell'elenco collegato nel database MySQL

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:

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.