Newsgroup: it.comp.www.php
Titolo: Cicli annidati

Ciao a tutti..
Il mio problema è questo:
a = query_db;
while(a){
echo "a[0]";
b = altra query con il valore a[0];
while(b){
echo "b[1] - b[2]";
}
}
Ecco tale schema funziona benissimo al primo passaggio e poi dal secondo
valore assunto da b non funziona più.
I valori di a[0] sono anni e poi dentro il ciclo while(b) vorrei
trovare i vari valori presenti in quell'anno. Spero di essermi spiegato.
Ciao
Homer

valore assunto da b non funziona più.
Posta il codice esatto. Dipende tutto da cosa usi per fare la query e per
recuperare i valori. Come l'hai postata non e', perche', in PHP, una cosa
e' la risorsa ritornata dalla query, ed altra cosa e' la tupla che estrai
nel ciclo.
Inoltre, potresti forse fare una sola query, ma senza vedere il codice e'
impossibile aiutarti.
Leonardo
-- 
While ordinarily valid that being widespread does not make a statement
true, I feel that the diffusion of anti-evolutionary beliefs does pose
a strong argument for Darwin having been, indeed, sorely mistaken.

 e' impossibile aiutarti.
Ciao Leonardo ecco ti il codice:
// Seleziono gli anni presenti nel database
$anno=mysql_query("SELECT DISTINCT anno FROM doc WHERE utente='123456' AND
stato='on' ORDER BY anno DESC",$link);
while($i=mysql_fetch_array($anno)){
echo "$i[anno]<br>";
$qs=mysql_query("SELECT doc.tipo AS tipo, file.file AS file FROM doc, file
WHERE 
doc.id
=file.id_doc AND doc.anno='$i[anno]' AND doc.utente='123456'
AND doc.stato='on'",$link);
echo "<table align=center width=60%><tr class=standard><td
align=left><h2>$i[anno]</h2></td></tr></table>";
 
echo "<table align=center width=60% bgcolor=black cellpadding=1
cellspacing=1>"; echo "<tr class=standard><td align=center 
bgcolor=#CCCCCC>Tipo</td><td align=center
bgcolor=#CCCCCCC>File</td></tr>";
 
while($s=mysql_fetch_array($qs)){
$link = "./download/$s[file]";
echo "<tr class=standard><td align=left bgcolor=#FFFFFF
width=70%>$s[tipo]<br></td><td align=center bgcolor=#FFFFFF width=30%><a
href=\"$link\">link</a></td></tr>"; }
echo "</table>";
echo "<br><br>";
}
Questo è l'estratto..
Ciao
Homer

// Seleziono gli anni presenti nel database
Allora in questo caso mi sembra che la query singola debba essere qualche
cosa come cosi':
$anno	= -1;
$qs=mysql_query("SELECT doc.tipo, file.file, doc.anno FROM doc, file WHERE
doc.id
=file.id_doc AND doc.utente='123456' AND doc.stato='on' ORDER
BY anno DESC;",$link);
while($s = mysql_fetch_array($qs))
{
	if ($anno != $s['anno'])
	{
		if (-1 != $anno)
			print '</table><br /><br />';
		$anno = $s['anno'];
		print <<<HEADER
$anno]<br />
<table align="center" width="60%" style="background-color: "#ffffff">
<tr class="standard">
	<td align="left" colspan="2"><h2>$anno</h2></td>
</tr>
<tr class="standard" style="background-color: #cccccc">
	<td align="center">Tipo</td>
	<td align="center">File</td>
</tr>
HEADER;
	}
	print <<<RIGA
<tr class="standard">
	<td align="left" width="70%">$s[tipo]<br /></td>
	<td align="center"><a href="./download/$s[file]">link</a></td>
</tr>
RIGA;
}
if (-1 != $anno)
	print '</table><br /><br />';
mysql_free_result($exec);


 		$anno = $s['anno'];
Ciao Leonardo funziona bene, ma non ho ben capito la condizione sopra..
Cioè il secondo if controlla se -1 != da $anno chiude tutto ? E quando si
può verificare questo ?
Ciao ed ancora grazie, non ho capito tutto tutto, ma ci studio sopra.

puň verificare questo ?
Sempre, tranne al primo giro: li' $anno vale -1, e non hai ancora aperto
nessuna tabella, sicche' non avrebbe senso chiuderla. In tutti gli altri
casi, se $anno non vale -1 vuol dire che qualcosa hai aperto... e quindi
al cambio dell'anno va chiuso.
Rileggendo il tuo codice pero' mi sono reso conto che non ho mica capito
come mai non funzionasse :-(


 come mai non funzionasse :-(
Non dirlo a me, non ci ho dormito... Non mi sembrava di aver scritto
bestemmie così grosse... Ma da qualche parte l'errore c'è...
Ciao
Homer