Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965

    Ricorsione e gestione sottocategorie

    Ho una tabella 'categories' con un campo idcat e uno idfather.
    Quest'ultimo contiene l'id della categoria padre (0 se inesistente).

    Purtroppo non sto riuscendo a stampare le categorie tipo:

    Cat 1
    Cat 2
    Cat 3
    Cat 3 -> Cat4
    Cat 3 -> Cat 5
    Cat 3 -> Cat 5 -> Cat 6
    Cat 7

    Qualcuno mi può illuminare mostrandomi una funzione ricorsiva per arrivare a ciò?

    Grazie, ciaO!

  2. #2

    Re: Ricorsione e gestione sottocategorie

    Originariamente inviato da keratox
    Ho una tabella 'categories' con un campo idcat e uno idfather.
    Quest'ultimo contiene l'id della categoria padre (0 se inesistente).

    Purtroppo non sto riuscendo a stampare le categorie tipo:

    Cat 1
    Cat 2
    Cat 3
    Cat 3 -> Cat4
    Cat 3 -> Cat 5
    Cat 3 -> Cat 5 -> Cat 6
    Cat 7

    Qualcuno mi può illuminare mostrandomi una funzione ricorsiva per arrivare a ciò?

    Grazie, ciaO!

    una volta volevo usare una struttura tale e quale alla tua nel concetto (un filesystem rudimentale basato su database, dovevo salvare le dir padre) e usavo la ricorsione appunto per ricavare tutto il percorso...

    ...purtroppo il tentativo falliva andando in timeout il tempo di esecuzione, quindi se si riesce a risolvere

    cmq, per una funzione ricorsiva, la funzione dovrebbe accettare un parametro idfather, se == 0 fai return 0, altrimenti cerchi nel database idfather dell'idfather (il nonno :stordito: ) richiamando ricorsivamente la funzione...la catena di chiamate dovrebbe darti a disposizione la catena degli idfather (che ti conviene salvare in un array), poi ricordarti di invertire l'ordine se vuoi partire dalla radice verso la foglia...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Thx.

    Se può servire, ho fatto così

    Codice PHP:
         $arr = array();
         
         function 
    rico($idf){
        global 
    $cn,$arr;
              
              if(
    $idf==0)
                  return 
    0;
              else{
                  
    $query = @mysql_query("SELECT * FROM tabella WHERE idcat='$idf'",$conn);
                   if(@
    mysql_num_rows($query)>0){
                       while(
    $rigo=@mysql_fetch_array($query)){
                            if(
    $rigo['idfather']!=0){
                                 
                                  
    rico($rigo['idfather']);
                                  echo 
    $rigo['title'] . " -> ";
                             }
                             else{
                                 echo 
    $rigo['title'] . " -> ";
                                  return 
    0;
                             }
                            
                        }
                   }
              }
              
         }
         
         
    $query = @mysql_query("SELECT * FROM tabella",$conn);
         while(
    $rigo = @mysql_fetch_array($query)){
             echo 
    "<option value=\"".$rigo['idcat']."\">";
              
    rico($rigo['idfather']);
              echo 
    $rigo['title'] . "</option>";
              
         } 

  4. #4
    Originariamente inviato da keratox
    Thx.

    Se può servire, ho fatto così

    Codice PHP:
         $arr = array();
         
         function 
    rico($idf){
        global 
    $cn,$arr;
              
              if(
    $idf==0)
                  return 
    0;
              else{
                  
    $query = @mysql_query("SELECT * FROM tabella WHERE idcat='$idf'",$conn);
                   if(@
    mysql_num_rows($query)>0){
                       while(
    $rigo=@mysql_fetch_array($query)){
                            if(
    $rigo['idfather']!=0){
                                 
                                  
    rico($rigo['idfather']);
                                  echo 
    $rigo['title'] . " -> ";
                             }
                             else{
                                 echo 
    $rigo['title'] . " -> ";
                                  return 
    0;
                             }
                            
                        }
                   }
              }
              
         }
         
         
    $query = @mysql_query("SELECT * FROM tabella",$conn);
         while(
    $rigo = @mysql_fetch_array($query)){
             echo 
    "<option value=\"".$rigo['idcat']."\">";
              
    rico($rigo['idfather']);
              echo 
    $rigo['title'] . "</option>";
              
         } 

    funziona?

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Sì.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.