problema con ciclo while?

ciao,

ho questa tabella

cat_id | cat_parent_id | cat_name

1 0 Editoria

2 0 Progetti

3 1 Fumetti

4 2 Lista progetti

Devo fare in modo che mi stampi le categorie Editoria e progetti (cat_parent_id = 0 ) e le relative sottocategorie:

fumetti (cat_parent_id = 1 ) appartiene alla categoria editoria (cat_id =1)

etc... 

quello che sono riuscito a fare è questo:

<?php
$sql = "SELECT a . * , b.cat_name AS sottomenu
FROM tbl_category a, tbl_category b
WHERE a.cat_parent_id =0
AND a.cat_id = b.cat_parent_id
ORDER BY a.cat_id LIMIT 0 , 30";

$result = dbQuery($sql) or die (mysql_error());

while($row = mysql_fetch_array($result)){
      echo $row['cat_name']."<br />";

while($row2 = mysql_fetch_array($result)){
      echo $row2['sottomenu']."<br />";
}

}

la query così com'è l'ho provata con phpmyadmin e funziona, mi visualizza tutto.

però con i cicli while, non mi stampa il primo dato delle sottocategorie per ciascuna categoria

inviato 10 anni fa
iTek
iTek
1
X 0 X

non devi eseguire 2 cicli while annidati ma un unico ciclo nel quale raggruppi i dati secondo la categoria.

 :bye:

P.S.: tieni presente che con quella query puoi recuperare solo una struttura a 2 livelli: categoria -> sottocategoria, senza poter spingerti oltre con l'annidamento dei livelli.

risposto 10 anni fa
Gianni Tomasicchio
modificato 10 anni fa
X 0 X

allora,

ho ottenuto questo:

<?php $sql = "SELECT a . * , b.cat_name AS sottomenu
FROM tbl_category a, tbl_category b
WHERE a.cat_parent_id =0
AND a.cat_id = b.cat_parent_id
ORDER BY a.cat_id LIMIT 0 , 30";

$result = dbQuery($sql) or die (mysql_error());

$tmp = "";
while($row = mysql_fetch_array($result)){
    if ($tmp != $row['cat_name']) {
          $tmp = $row['cat_name'];
          echo "\n<li><h2>".$row['cat_name']."</h2>\n";

     }

        echo"<ul><li><a href=\"index.php?page=view&id={$row['cat_id']}\">". $row['sottomenu']."</a></li>\n</ul>\n";


}?>

però adesso si presenta un nuovo problema:

<a href=\"index.php?page=view&id={$row['cat_id']} è quello relativo a cat_parent_id

a me serve quello reale....

è tutto sbagliato? :'(

risposto 10 anni fa
iTek
iTek
1
X 0 X

L'approccio usato per il while mi sembra corretto  O0

Per l'id basta modificare leggermente la query:

SELECT a . * , b.cat_name AS sottomenu, b.cat_id vero_cat_id

e poi usare $row['vero_cat_id']

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda