- Home
- Categorie
- Coding e Sistemistica
- PHP
- annidare due while
-
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?
-
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>";} } }
-
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?
-
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_3categoria_2
--------banner_2_1
--------banner_2_2
--------banner_2_3è sbagliato nel senzo che mi stampa un solo risultato...
cmq grazie per l'interessamento...
-
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.
-
è sbagliata l'organizzazione del codice
devi innanzitutto ottenere da db ciascuna categoria
e poi per ognuna di esse ti fai dare i bannertotale x+1 query (dove x è il numero delle categorie)
-
@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