Esegui una query che seleziona tutte le righe con genitore = '-1'.
Ogni riga controlli se ci sono altre righe con genitore = id: in caso affermativo ti basta eseguire la stessa query.
Qualcosa del genere:
Codice PHP:
<?
echo '<ul>';
$query = mysql_query('SELECT * FROM table WHERE genitore = \'-1\'');
while($riga = mysql_fetch_array($query)){
$id = $riga['id'];
$nome = $riga['nome'];
$link = $riga['link'];
echo "<li><a href='$link'>$nome</a></li>";
$query2 = mysql_query("SELECT * FROM table WHERE genitore = '$id'");
if(mysql_num_rows($query2) > 0){
echo '<ul>';
while($riga2 = mysql_fetch_array($query2)){
$nome2 = $riga2['nome'];
$link2 = $riga2['link'];
echo "<li><a href='$link2'>$nome2</a></li>";
}
echo '</ul>';
}
}
echo '</ul>';
?>
Per renderlo infinito potresti utilizzare una funzione o semplicemente implementare meglio il while.
Ciao!