"espandere l'albero" nel senso di stamparlo a video?
Puoi usare gli esempi proposti sull'articolo di sitepoint con la funzione display_tree() riadattandoli al tuo DB
Naturalmente l'approccio cambia in base all'implementazione che hai scelto:
Adjacency list:
Nell'articolo la radice ha come "padre", nel campo id_capo, il valore NULLcodice:function display_tree($parent, $level) { $sql = "SELECT id_impiegato FROM personale WHERE id_capo={$parent}"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { echo str_repeat('-',$level).$row['id_impiegato']." "; display_tree($row['id_impiegato'], $level+1); } } // poi richiami la funzione, partendo dalla radice display_tree(0, 0);
Per usare questa funzione conviene usare il valore 0, immaginando che gli id siano numeri interi positivi (da 1 in su quindi)
Modified Preorder Tree Traversal:
Entrambe queste funzioni stampano l'albero indicando solo l'id di ciascun record. Con poche modifiche si può adattare il tutto inserendo il nome di fianco all'id, oppure inserendo il tutto in un tag <select>, ecc.ecc.codice:function display_tree($root) { $sql = "SELECT sx, dx FROM personale WHERE id={$root}"; $result = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_array($result); $right = array(); $sql = "SELECT id, sx, dx FROM personale WHERE sx BETWEEN {$row['sx']} AND {$row['dx']} ORDER BY sx ASC"; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_array($result)) { if (count($right)>0) { while ($right[count($right)-1]<$row['dx']) { array_pop($right); } } echo str_repeat('-',count($right)).$row['id']." "; $right[] = $row['dx']; } } // poi la richiami display_tree(1);

Rispondi quotando