Visualizzazione dei risultati da 1 a 10 su 10

Discussione: While dentro While?

  1. #1
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567

    While dentro While?

    Ciao, come faccio per fare due QUERY una dentro all'altra?


    Avendo 3 elementi nel database e Facendo:

    codice:
    $result=mysql_query("SELECT campo3 FROM tab1");
    	      while ($row = mysql_fetch_array($result)){
                  $campo3 = $row['campo3'];
    
    $result2=mysql_query("SELECT tab2.campo2, tab2.campo1, tab1.campo1 FROM tab1, tab2 WHERE tab1.campo1 = tab2.campo1");
    	      while ($row2 = mysql_fetch_array($result2)){
    		  $campo2 = $row2['campo2'];
    
    echo " $campo3 - $campo2";
    		  } 
        }

    mi vengono fuori 9 risultati, perché il ciclo ovviamente per tutti e tre i risultati, passa tre volte.

    Come faccio per evitarlo e mettere correttamente un WHILE dentro l'altro WHILE?



    GRAZIE

  2. #2
    credo che dovresti migliorare la tua query...i database offrono molte potenzialità...

    tu che risultato vuoi ottenere? che ti serve sapere dal database?

    dal tuo codice si capisce che hai 3 tabelle:
    codice:
    CREATE TABLE tab1 (
       campo1
    );
    
    CREATE TABLE tab2 (
       campo2
    );
    
    CREATE TABLE tab3 (
       campo3
    );
    già qui è un dilemma...xkè usare 3 tabelle uguali? esattamente che ti serve sapere?
    xkè potresti usare un JOIN, un NATURAL JOIN...ad esempio:
    codice:
    SELECT t12.campo2, t3.campo3
    FROM tab3 AS t3
    JOIN (
       SELECT campo2
       FROM tab1, tab2
       WHERE tab1.campo1 = tab2.campo2
    ) AS t12
    xò servirebbe avere più info sia sulle tabelle che su quello che vorresti fare...

  3. #3
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    Grazie per la tua risposta.


    Ho solo 2 tabelle.

    La chiave della tab2 (tab2.campo1) è presente anche nella Tab1.

    Dalla tab1 mi servono tutti i campi, mentre volevo che dalla tab2 venisse preso il campo2 corrispondente.

    Per essere più chiaro: fai conto che nella tab2 ci siano l'ID_colore e il nome_del_colore.

    Nella tab1 (quella dei prodotti) memorizzo l'ID_colore corrispondente per ogni prodotto.

    Quando però voglio visualizzare i risultati, voglio che prenda tutti i campi della tab1 riferiti al prodotto, sostituendo all'ID_colore il nome vero del colore, presente nella tab2.

    Non ho saputo fare la JOIN e allora avevo provato con 2 WHILE.



    grazie

  4. #4
    Dalla tab1 mi servono tutti i campi, mentre volevo che dalla tab2 venisse preso il campo2 corrispondente.

    Per essere più chiaro: fai conto che nella tab2 ci siano l'ID_colore e il nome_del_colore.

    Nella tab1 (quella dei prodotti) memorizzo l'ID_colore corrispondente per ogni prodotto.

    Quando però voglio visualizzare i risultati, voglio che prenda tutti i campi della tab1 riferiti al prodotto, sostituendo all'ID_colore il nome vero del colore, presente nella tab2.
    Ok, allora prova con:
    codice:
    SELECT t1.idprodotto, t2.nomecolore
    FROM tab1 AS t1
    LEFT JOIN tab2 AS t2 ON t1.idcolore = t2.idcolore

  5. #5
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    Ma come allargo questa QUERY in modo da richiamare ANCHE tutti gli altri campi della tab1?

    Altrimenti non ho risolto il mio problema



    E poi cosa significa
    codice:
    FROM tab1 AS t1
    ??

    tab1 e t1 non sono sempre la tabella 1?


    grazie!

  6. #6
    La presenza di tutti gli elementi di tab1, che l'ho rinominata in t1 per fare il JOIN, viene garantita dal LEFT JOIN che è come un JOIN ma che conserva tutti gli elementi della tabella "a sinistra" del JOIN nel caso non ci siano corrispondenze alla clausola ON del JOIN.

    Quindi il risultato sarà:

    ID --- COLORE
    01 --- Giallo
    02 --- Rosso
    03 --- NULL
    04 --- Verde
    05 --- NULL
    i NULL saranno in corrispondenza degli elementi che non hanno un corrispettivo nella tabella dei colori

  7. #7
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    Ho capito, grazie, hai rinominato la tab.
    Ma come allargo la QUERY che mi hai scritto in modo da richiamare ANCHE tutti gli altri campi della tab1?


    grazie ancora

  8. #8
    i campi (le colonne) si selezionano nella clausola SELECT, quindi al posto di:
    codice:
    SELECT t1.idprodotto, t2.nomecolore
    fai:
    codice:
    SELECT t1.idprodotto, t1.campo2, t1.campo3, ..., t2.nomecolore
    per selezionare i vari campi che vuoi


    oppure:
    codice:
    SELECT t1.*, t2.nomecolore
    per selezionare tutti i campi di t1 (ovvero tab1)

  9. #9
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    Sei stato molto chiaro. Grazie.

    Purtroppo la QUERY risulta vuota.
    Non dà nessun errore.



    grazie

  10. #10
    strano...se mi passi il file sql con tabelle e dati ricreo in locale la situazione e vedo cosa nn va nella query...anche se mi sembra ok...

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.