Te la spiego in breve, è molto semplice.

In pratica hai una tabella nel db che chiami... categorie.

i campi sono id,name,parent.

Se parent = 0 significa che la categoria è una root.

Crei una funzione che estragga tutti i campi dove parent = $cat.

ti faccio un esempio per chiarirti le idee:

id | name | parent
1 | frutta | 0
2 | rossa | 1
3 | mele | 2
4 | ciliege | 2
5 | verde | 1
6 | pere | 5
7 | gialla | 1
8 | banane | 7


Come vedi tutti i record sono collegati tra loro dal campo parent.

Mettiamo il caso che passi alla tua funzione l'id 0 ti verrà mostrato "frutta".

con un collegamento del tipo
<a href="page.php?cat=$id> potrai passare alla funzione l'id della categoria di cui vuoi vedere le sottocategorie.

nel nostro esempio verrà mostrato
<a href="page.php?cat=1>Frutta</a>

Cliccando sul link la funzione estrarrà dal db tutti i record dove parent = 1 mostrando quindi

rossa
verde
gialla

Fin qui tutto bene

Mettiamo il caso tu voglia avere tutto l'albero. Quindi mostrare qualcosa del tipo:

codice:
frutta
|
+-- rossa
|    |
|    +--mele
|    +--ciliege
+-- verde
|    |
|    +--pere
+-- gialla
     |
     +--banane
Con il sistema di prima non funzionerebbe.

Ecco che entra in gioco la ricorsione.

In pratica mettiamo il caso che la tua funzione di prima si chiami ricorsione.
All'inizio era così

Codice PHP:
function ricorsione($cat)
        {
           
$query "SELECT * FROM categories WHERE parent = '$cat'";
           
$result mysql_query($query);
           while (
$row mysql_fetch_array($result))
                {
                   echo 
$row['name'];
                }
        } 
ora la funzione dovrà essere così:

Codice PHP:
function ricorsione($cat)
        {
           
$query "SELECT * FROM categories WHERE parent = '$cat'";
           
$result mysql_query($query);
           while (
$row mysql_fetch_array($result))
                {
                   
ricorsione ($row['id']);
                   echo 
$row['name'];
                }
        } 
In questo modo avri stampato tutto l'albero delle categorie.

Comincia a fare una prova così per capire bene il meccanismo. Poi magari andiamo avanti con la spiegazione magari per ottenere un path e per migliorare la funzione. Ciao!