Newsgroup: it.comp.www.php
Titolo: chi mi aiuta?

Salve,
non riesco a risolvere un problema su una progr di categorie di link.
ho una tabella MySQL con i link organizzato per ID categoria e una tabella
di categorie i cui campi sono ID, parent e nome.
parent mi indica se la categoria è in realtà una sottocategoria, ossia su
parent c'è l'ID della categoria includente( se è 0 la cat è sulla "root",
altrimenti è un subcategoria della categoria con ID = parent)
ora quello che devo fare è indicare quanti link ci sono all'interno di una
categoria, compresi naturalmente i link di ogni sua sottocategoria.
Quello che non riesco a fare è calcolare i link delle sub-sub-...-categorie.
Posto il codice nella speranza che qualche buona anima mossa a compassione
mi aiuti
//tiro fuori le categorie della root della directory
if ($ID == ""){$ID=0;}
$result=mysql_query("SELECT * FROM categoriel WHERE parent='$ID' ORDER BY
'nome_categoria'");
while ($row=mysql_fetch_row($result)) {
 $IDu=$row[0];
 $parent=$row[1];
 $nome_categoria=$row[2];
//calcolo i link sotto questa categoria
 $resultNUM2=mysql_query("SELECT * FROM link WHERE ID_categoria='$IDu'");
 $num1 = $num1 + mysql_num_rows($resultNUM2);
//Mi tengo il valore di IDu con ID_cat perchè mi servirà per spostarmi da
una cat all'altra
 $ID_cat=$IDu;
//verifico se ci sono categoria sotto questa  IDu
 if(mysql_num_rows(mysql_query("SELECT * FROM categoriel WHERE
parent='$IDu'")) != 0){
//calcolo i link sotto a questa
 $result2=mysql_query("SELECT * FROM categoriel WHERE parent='$IDu'");
      while ($row2=mysql_fetch_row($result2)) {
       $IDu=$row2[0];
       $resultNUM2=mysql_query("SELECT * FROM link WHERE
ID_categoria='$IDu'");
       $num1 = $num1 + mysql_num_rows($resultNUM2);
      }
 }
echo"
<tr>
 <td></td>
 <td valign=bottom><a href=\"$PHP_SELF?ID=$IDu\" class=\"linkblack\"><img
src=\"img/blank_link.gif\" width=\"33\" height=\"33\" alt=\"\"
border=\"0\"></a></td>
 <td colspan=3 valign=middle align=left><a href=\"$PHP_SELF?ID=$ID_cat\"
class=\"linkblack\">$nome_categoria ($num1)</a></td>
</tr>
<tr>
 <td colspan=5><hr color=black noshade size=1></td>
</tr>
";
//azzero il num1 prima di ricominiare il ciclo
$num1= "0";
}
That's all folks
Luca

Luca <lu...@NOSPAMgraphikdesign.com> wrote in message
uPAfa.78$Jg1....@news1.tin.it...

Da quanto ho capito le tue categorie sono organizzate ad 'albero', e gli
alberi vanno trattati con funzioni ricorsive altrimenti non ne uscirai mai
vivo.
Stefano.

 ha scritto nel messaggio
news:b5mmem$7gt$1...@lacerta.tiscalinet.it...


Esempio per stampare tutte le 'categorie' cioè per visitare l'albero dal
nodo padre fino a tutte le foglie (i nodi senza figli)
function visitaAlbero($nodo)
{
 stampa($nodo);
// $listaFigli è un array di nodi passato per variabile e quindi valorizzato
dalla funzione trova figli
 $numFigli=trovaFigli($nodo,$listaFigli);
 // chiamata ricorsiva, invoca la stessa funzione su ogni nodo figlio,
// se $numFigli==0 il ciclo non viene eseguito e non ci sono altre chiamate
ricorsive
for ($i=0;$i< $numFigli;$i++)
 visitaAlbero($listaFiglin[$i]);
}
E' quasi pseudo-codice e serve solo per farti capire il concetto di
ricorsione che se non hai mai usato è un po' ostico, quindi te lo devi
studiare un po';
Ovviamente il problema si puo' risolvere senza ricorsione, utilizzando una
strutture chiamata PILA
ma alla fine il codice ricorsivo è molto molto +  breve e semplice.
Stefano
Luca <lu...@NOSPAMgraphikdesign.com> wrote in message
W5Bfa.159$Jg1....@news1.tin.it...


 ma alla fine il codice ricorsivo č molto molto +  breve e semplice.
