Anke per lo script che sto realizzando io ho dovuto fare una cosa del genere....
Non è molto facile da spiegare anke se il funzionamento è abbastanza intuitivo
ammettiamo che questi siano i dati che hai nel mysql
CatId,CatNome,CatDescrizione,CatParent
1 -Principale- Descr - 0
2 -Sub- Descr - 1
3 -Sub1- Descr - 2
4 -Sub2- Descr - 3
Dove CatParent e' l'id della categoria che contiene l'attuale sottocategoria
In pratica io ho usato un ciclo while dove dato l'id 4 (cioè l'id della categoria che sto prendendo in considerazione) vado alla ricerca del del suo CatParent che memorizzo in una variabile.....finche' CatParent è diverso da zero faccio eseguire il ciclo while dove all'interno del ciclo mi memorizzo in una variabile i dati a me necessari.
Se ti puo' essere utile ti posto il codice php che sto usando io anke se forse a te non sara' molto comperensibile
Codice:
function TD_ottieni_percorso($TD_cat_id){
//Ricavo i dati di tutte le cartelle
//includo il file config
include('config.inc.php');
$TD_tablename='cat';
$query = "SELECT * FROM $TD_pre$TD_tablename ORDER BY TD_cat_name";
$queryresult = TD_connect($query);
while ($row = mysql_fetch_array($queryresult))
{
$TD_cat[]=TD_create_var($row,$queryresult,'TD_cat_');
}
//ottengo gli id dei refer delle cartelle //ottengo la lista degli id al ritroso dalla punta alla base
while ($TD_cat_id!=''){
foreach($TD_cat as $var_index => $var_value)
{
if($TD_cat[$var_index][id]==$TD_cat_id)
{
$TD_lista_cat_id[]=array('name'=>$TD_cat[$var_index][name],'id'=>$TD_cat[$var_index][id]);
$TD_cat_id=$TD_cat[$var_index][ref];
}
}
}
//riordino gli id dala base alla punta
if (is_array($TD_lista_cat_id)){
$TD_lista_cat_id=array_reverse($TD_lista_cat_id);
foreach($TD_lista_cat_id as $var_index => $var_value)
{
$TD_links.=' :: [<a href="'.$TD_path[script_included_file].'&TD_action=show&mode=1&TD_cat_id='.$TD_lista_cat_id[$var_index][id].'">'.$TD_lista_cat_id[$var_index][name]."</a>]";
}
}
return $TD_links;
}