Se io fossi in te la risolverei con un unica "funzione ricorsiva" che ha all'interno un unica query.Credo che in php non ci siano problemi a creare funzioni che chiamino se stesse.
In fondo il tuo è un albero e devi scorrerne i rami.Te lo scrivo in "meta linguaggio" perchè sicuramente tu sei più bravo di me con il php.Caso mai cerca anche su internet algoritmi per lo scorrimento di alberi.
la farei così:
Codice PHP:
function caricaNodo(id_figlio)
{
query_estrazione_nodo(id_figlio); /*query di estrazione*/
while(fecth_array_assoc() != not_found) /* ciclo per tutti i figli estratti dalla query*/
{
scrivo_nodo(); /*stampo o salvo in un array il figlio estratto*/
caricaNodo(id_figlio_prelevato_dalla_fetch); /* chiamo ricorsivamente la funzione e gli passo l'id_figlio estratto dalla fetch*/
}
}
Così a prescindere dal livello di ricerca stampi ad ogni giro un figlio che scende di livello finchè la query torna qualcosa.
prova a vedere se il ragionamento ti torna e provalo a scrivere in php.
occhio alla funzione ricorsive che altrimenti vai in "loop".
testa bene le condizioni di uscita e magari aggiungici qualche controllo.
Spero di esserti stato utili e spero che il "metalinguaggio" sia stato comprensibile