per fare una cosa del genere, dovresti aggiungere un campo che rappresenta il padre diretto del record.
Fatto questo puoi interagire in modo ricorsivo e al suo interno usi SQL con ricerca in LIKE lato destro (che è la parte che cresce) usando il campo padre diretto:
NomeNodo | Padre
A | NULL //root
B | A| // B è figlio di A
C | A|B| // C è figlio di B che è figlio di A
D | A|B|C| // D è figlio di C che è figlio di B che è figlio di A
Nel tuo caso è più importante la strutturazione iniziale dei record: il lavoro successivo è al quanto semplice.
un esenpio di SQL sarà:
//
// chi sono i figli di...:
function buildtree(padre) {
var padre = padre + "|_"; // padre in ricorsione sarà A| -> A|B| e così via...
SELECT NomeNodo FROM TreeViewTable WHERE Padre LIKE padre;
}
Ad esempio se il parametro della funzione è uguale a "A|B|"
la SQL sarà: SELECT NomeNodo FROM TreeViewTable WHERE Padre LIKE 'A|B|_'
che signfica prendi tutti quelli che hanno padre che inizia con "A|B|" e un qualsiasi carattere (nell'esempio solo A|B|C|)
Più o meno è questo quello che dovresti fare e che io feci una decina di anni fa quindi scusami ma non ricordo tutto :-)