• User

    annidare due while

    Scusate ho seri problemi a capire una cosa che per me è fondamentale, come faccio ad annidare due cicli while???

    Apparentemente la risposta è semplice ma io ci sto provando da un po' di tempo e ancora nn ci sono riuscito.

    Supponendo che devo selezionare tutti i dati di una tabella, e per ogni campo di questa ci sono i dati di un altra tabella collegati per id

    
    id_cat = id_cat_ban
    
    

    dove cat sta per vategorie e ban per banners io voglio stampare in un unico contesto(per fare un menu a comparsa) tutti i dati di categoria, e per ogni voce di categoria, tutti i dati di banners corrispondenti...

    Qualcuno avrebbe delle proposte in merito?


  • User

    Per essere piu chiaro, questo dovrebbe essere il codice sbagliato:

    
    function menu_categorie(){
    $sql = "SELECT * FROM categorie ORDER BY cat_id";
    $result = mysql_query($sql) or die ("errore nella query" . mysql_error());
    while ($row = mysql_fetch_array($result)){
        if($_GET['cat'] == $row['cat_id']){echo "<b>";}
        echo "<a href=\"http://www.cerca-facile.it/index.php?cat=". $row['cat_id'] . "\">". ucfirst($row['cat_nome']) . "</a>\n";
        while($row_2 = mysql_fetch_array($result)){
    echo "<a href=\"http://www.cerca-facile.it/index.php?cat=". $row['cat_id'] . "\">". ucfirst($row['ban_nome']) . "</a>\n";
    }
        if($_GET['cat'] == $row['cat_id']){echo "</b>";}
        }
    }
    
    

  • User

    oddio... indentato in questo modo il codice fa quasi paura leggerlo O.O
    cosa vorresti che ti stampasse la pagina?
    cosa ti stampa il codice sbagliato?


  • User

    vorrei che mi stampasse tutti i campi della tabella categorie e tutti i campi della tabella banners tipo:

    categoria_1
    --------banner_1_1
    --------banner_1_2
    --------banner_1_3

    categoria_2
    --------banner_2_1
    --------banner_2_2
    --------banner_2_3

    è sbagliato nel senzo che mi stampa un solo risultato...
    cmq grazie per l'interessamento...:vaiii:


  • User

    scusa hai ragione l'avevo scritto un po frettolosamente

    
    function menu_categorie(){
    $sql = "SELECT * FROM categorie, benners WHERE cat_id = cat_id_ban ORDER BY nome_cat";
    $result = mysql_query($sql) or die ("errore nella query" . mysql_error());
    while ($row = mysql_fetch_array($result)){
        
        echo "<a href=\"http://www.cerca-facile.it/index.php?cat=". $row['cat_id'] . "\">". ucfirst($row['cat_nome']) . "</a>\n";
            while($row_2 = mysql_fetch_array($result)){
            echo ucfirst($row['ban_nome']);
            }
        
        }
    }
    
    

    piu o meno dovrebbe essere questo.


  • User

    è sbagliata l'organizzazione del codice

    devi innanzitutto ottenere da db ciascuna categoria
    e poi per ognuna di esse ti fai dare i banner

    totale x+1 query (dove x è il numero delle categorie)


  • User Attivo

    @ilariotoko said:

    Scusate ho seri problemi a capire una cosa che per me è fondamentale, come faccio ad annidare due cicli while???

    Apparentemente la risposta è semplice ma io ci sto provando da un po' di tempo e ancora nn ci sono riuscito.

    Supponendo che devo selezionare tutti i dati di una tabella, e per ogni campo di questa ci sono i dati di un altra tabella collegati per id

    >
    id_cat = id_cat_ban
    
    >```
     
    dove cat sta per vategorie e ban per banners io voglio stampare in un unico contesto(per fare un menu a comparsa) tutti i dati di categoria, e per ogni voce di categoria, tutti i dati di banners corrispondenti...
     
    Qualcuno avrebbe delle proposte in merito?
     
    PROVA COSì
     
    $sel1 = "SELECT * FROM tabella1 GROUP BY id_tab1";
    $q1 = mysql_query($sel1,$connessione);
    while(($obj1 = mysql_fetch_object($q1)))
    {
    // PRENDO I VALORI DELLA PRIMA TABELLA
    $id_tab1 = strip_tags($obj1->id_tab1);
    $altro = strip_tags($obj1->altro);
    // ECCETERA
     
    // SELEZIONO I RECORD DA UN'ALTRA TABELLA
    $sel2 = "SELECT * FROM tabella2 WHERE id_tab2='$id_tab1'";
    $q2 = mysql_query($sel2,$connessione);
    while(($obj2 = mysql_fetch_object($q2)))
    {
    // PRENDO I VALORI DELLA SECONDA TABELLA
    $id_tab2 = strip_tags($obj2->id_tab2);
    $altro2 = strip_tags($obj2->altro2);
    // ECCETERA
    echo "";
    } // CHIUDO WHILE
    } // CHIUDO PRIMO WHILE
    Non so se ho capito bene quello che vuoi fare ma così forse risolverai
    Ciao