Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316

    array e clicli annidati

    ciao, dunque, ho un primo ciclo che legge dei valori dal database e li stampa in una cella (td). Mi serve un altro ciclo che legge/stampa valori di una tabella ma in base ai valori del primo (i valori del primo ciclo sono chiavi nella seconda tabella. al momento mi da errore sulla seconda query.
    questo il mio codice.
    grazie come al solito,
    L.


    codice:
    while($col1=mysql_fetch_array($res1)){
                        for($i=0;$i<count($res1);$i++){
                            $sql2="SELECT nomeSala FROM band WHERE nomeBand=$col1[$i]"; //ogni valore della prima tabella va nella variabile $sql2
                            $res2=mysql_query($sql2,$con); 
                            echo"$col1[$i], "; //stampa i valori della prima tabella
                        }
                    }
                echo"</td>
                <td>";
                for($n=0;$n<count($res2);$n++){
                    while($col2=mysql_fetch_array($res2[$n])){ //estraggo i valori
                        for($i=0;$i<count($col2);$i++) //stampo i valori nella stessa cella
                            echo"$col2[$i], ";
                        }
                }

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    stampa a schermo questo, scommetti che la query non è quello che ti aspetti?
    $sql2="SELECT nomeSala FROM band WHERE nomeBand=$col1[$i]"

    ah, usare una join e fare una query unica pensi proprio sia impossibile?

  3. #3
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    grazie per la risposta,
    $sql2 stampata corrisponde a 2 query(e non a una)..ma se la tiro fuori dal ciclo for non ho più l'indice $i che mi serve. m iservirebbe un array di query e poi valutarle singolarmente nel secondo ciclo..

    fare un join..beh ho provato a fare una query unica ma richiede una subquery che mi restituiva più valori e quindi non funziona..sto anche pensando di unire tutto in un unica tabella visto che non ci saranno miliardi di dati e quindi la ridondanza sarebbe trascurabile..

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    così, in modalità blind:
    - se una subquery restituisce più risultati e a te ne serve uno si può usare limit;
    - se vuoi fare un'unica tabella, fallo pure... poi però preparati a gestire eventuali variazioni dei dati ridondati (che si possono anche tramutare in bagni di sangue a seconda delle condizioni...)

    poi oh, sono scelte... io mi sono orientato a cercare di ottenere recordset che abbiano tutto quello che mi serve e a gestirli in maniera il più lineare possibile

  5. #5
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    per punti:
    - a me servono tutti ma la query non funzionava perchè mi dava "error: subquery returns multiple rows" o qualcosa di simile (e sì, il problema generale è che a me serve estrarre più valori da ogni tabella ma sono tutti correlati)
    - no, ho fatto due conti e no, meglio di no..tengo le tabelle separate..

    per chiarire meglio ti faccio uno schemino delle tabelle
    musicista(codice,nome,cognome....)
    band(codice[musicista],nomeBand)
    salaprove(nomeSala,nomeBand[band])

    in band e sala sono tutte chiavi primarie perchè la stessa band (nomeBand) è formata da più musicisti (codice) e la stessa band (nomeBand) può usare più sale prova (nomesala)

    sto facendo una tabella in cui ci sono un po' di dati anagrafici (ogni riga corrisponde a un musicista) e poi le celle "band" dove si stampano tutte le band di quel musicista (e questa parte funziona) e sala prove dove si stampano tutte le sala prove che ogni band di quel musicista utilizza (e questa non funziona perchè ogni sala prove è collegata alla band). ti posto il codice completo della tabella

    codice:
    $sql="SELECT * FROM soci";
    $res=mysql_query($sql,$con);
    
    
    
    if ($res==0){ 
        echo "<br>Nessun risultato";
    }else{
        while($col=mysql_fetch_array($res)){
            $sql1="SELECT nomeBand FROM band WHERE numTessera=$col[0]";
            $res1=mysql_query($sql1,$con);
            echo"<tr>
                <td><form method='post' action='print.php'>
                    <input type='hidden' name='numTessera' value='$col[0]'>
                    <input type='submit' name='stampa' value='Documenti' class='butt'></input></form>
                </td>
                <td> $col[0]</td>
                <td> $col[1]</td>
                <td> $col[2]</td>
                <td> $col[11]</td>
                <td> $col[12]</td>
                <td> $col[14]</td>
                <td>"; 
                    while($col1=mysql_fetch_array($res1)){
                        for($i=0;$i<count($res1);$i++){
                            $sql2="SELECT nomeSala FROM band WHERE nomeBand=$col1[$i]";
                            $res2=mysql_query($sql2,$con); 
                            //echo"$col1[$i], ";
                            echo"$sql2";
                        }
                    }
                echo"</td>
                <td>";
                for($n=0;$n<count($res2);$n++){
                    while($col2=mysql_fetch_array($res2[$n])){
                        for($i=0;$i<count($col2);$i++)
                            echo"$col2[$i], ";
                        }
                }
                echo"</td>
            ";
            }
        }

    ciao e grazie
    L.
    Ultima modifica di leaf; 15-11-2014 a 13:29

  6. #6
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    ops ho sbagliato..doppio post

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    una cosa tipo
    codice:
    SELECT m.nome, m.idmusicista, b.nomeband, b.idband, s.nomesala, s.idsala    
    FROM musicisti as m 
        INNER JOIN band as b ON m.idmusicista = b.idmusicista
        INNER JOIN sala as s ON b.idband = s.idband
    ORDER BY m.idmusicista, b.idband, s.idsala
    dovrebbe restituirti n righe per musicista con variazioni sulla band e la sala
    poi quando stampi il resultset gestisci tutti i valori mettendo dei comportamenti diversi a seconda dei dati che cambiano

  8. #8
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    ok..sembra funzionare!! però dove/come la integro nella tabella php?
    grazie davvero!!!

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.