Visualizzazione dei risultati da 1 a 8 su 8

Discussione: dubbio query

  1. #1

    dubbio query

    salve, ho un dubbio che proprio non mi so spiegare:
    il seguente codice prende i risultati di due query diverse, scorre le righe e stampa i valori che mi interessano, solo che se metto la riga di codice:

    >>>>$risultato2=mysql_query($query2);

    fuori dal primo ciclo while mi stampa solo i valori aventi id uguali al primo nome, mentre quelli degli altri se li dimentica. perchè? secondo il mio punto di vista inviare la query fuori dal ciclo (quindi inviarla una sola volta) e dentro non dovrebbe cambiare assolutamente niente.

    >>>>>>>>>>>>>codice<<<<<<<<<<<

    $risultato=mysql_query($query);
    while($row=mysql_fetch_array($risultato)){
    $i=1;
    $id=$row["ID"];
    echo "".$row["nome"]."

    ";

    $risultato2=mysql_query($query2); //riga incriminata!!!!
    while($row=mysql_fetch_array($risultato2)){
    if($row["ID"]==$id) {echo "$i ".$row["testo"]."

    "; $i++;};

    }
    }

    risultato corretto:

    nome1
    1 testo1
    2 testo2

    nome2
    1 testo3

    nome3
    1 testo4

    risultato sbagliato:

    nome1
    1 testo1
    2 testo2

    nome2
    //non mi inserisce nulla
    nome3
    //non mi inserisce nulla

    grazie dell'aiuto. Scommetto che avrò fatto qualche errore da pirla.

  2. #2
    Se magari posti la struttura delle tabelle coinvolte e le query che esegui sarebbe meglio.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    cosa c'entra la struttura delle tabelle? sono nomalissime tabelle e le 2 query 2 normalissime select e ho appurato che funzionano.

    del tipo:

    1a query: "select campo1,campo2
    from tabella1,tabella2,tabella3
    where tabella1.attributo=tabella2.attributo and tabella2.attributo=tabella3.attributo
    group by attributo";

    2a query: "select campo1,campo2
    from tabella1,tabella2,tabella3
    where tabella1.attributo=tabella2.attributo and tabella2.attributo=tabella3.attributo
    ";

    la prima con il group by mi permette di stampare i nomi e la seconda di recuperare tutti i testi relativi ai nomi, che poi stamperò facendo combaciare l'id con quella del relativo nome.

  4. #4
    Originariamente inviato da akkressor
    cosa c'entra la struttura delle tabelle? sono nomalissime tabelle e le 2 query 2 normalissime select e ho appurato che funzionano.
    ...
    la prima con il group by mi permette di stampare i nomi e la seconda di recuperare tutti i testi relativi ai nomi, che poi stamperò facendo combaciare l'id con quella del relativo nome.
    E queste informazioni andavano dedotte dal tuo primo post?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221

    Re: dubbio query

    Originariamente inviato da akkressor

    $risultato=mysql_query($query);
    while($row=mysql_fetch_array($risultato)){
    $i=1;
    $id=$row["ID"];
    echo "".$row["nome"]."

    ";

    $risultato2=mysql_query($query2); //riga incriminata!!!!
    while($row=mysql_fetch_array($risultato2)){
    if($row["ID"]==$id) {echo "$i ".$row["testo"]."

    "; $i++;};
    }
    }
    nel secondo cicolo non puoi usare lo stesso nome di variabile ($row) altrimenti al primo 'giro' viene sovrascritta

    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  6. #6

    Re: Re: dubbio query

    Originariamente inviato da las
    nel secondo cicolo non puoi usare lo stesso nome di variabile ($row) altrimenti al primo 'giro' viene sovrascritta

    risultato query1:
    tabella con 3 campi: [ID][nome][testo]
    gruppati in base all'ID, in quanto mi serve stampare una sola volta il nome che mi interessa.

    es.
    7 nome1 testo1
    7 nome1 testo2
    7 nome1 testo3
    8 nome2 testo1
    8 nome2 testo2

    siccome non voglio stampare lo stesso nome ad ogni testo li ho raggruppati in base all'id.

    quindi con il group by;

    7 nome1 testo1
    8 nome2 testo1

    da qui stampo i nomi e dei testi non me ne può fregare di meno.

    risultato query2 (query1 senza group by):

    7 nome1 testo1
    7 nome1 testo2
    7 nome1 testo3
    8 nome2 testo1
    8 nome2 testo2

    nel secondo while faccio un controllo=>se l'id della riga corrisponde a quello della riga della query1 allora mi stamperà sotto al nome tutti i testi relativi a quel nome.

    P.S. anche cambiando nome alla variabile $row al secondo ciclo non cambia nulla quindi dubito venga sovrascritta.

  7. #7
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    ma perchè fai tutte queste query quando te ne basterebe una?

    Codice PHP:
    $query ="SELECT campo1,campo2 ecc.. ... ... ORDER BY nome";
    $risultato=mysql_query($query);
    $nomeAttuale="";
    while(
    $row=mysql_fetch_array($risultato)){
       if(
    $nomeAttuale!=$row['nome']){
          echo 
    "[b]".$row["nome"]."[/b]

    "
    ;
          
    $nomeAttuale=$row['nome];   
       }

       echo "$i ".$row["testo"]."

    "; 
       $i++;

    i dati saranno ordinati per nome, e con un if controlli se stai passando al nome successivo lo stampi, altrimente stampi solo il testo.

    Se poi vuoi proprio fare 2 query almeno la seconda costruiscila dentro il ciclo e falla mirata sul campo (possibilmente un id) in modo da tirare fuori solo quello che ti serve.

    Codice PHP:
    $query ="SELECT campo1,campo2 ecc.. ... ... ORDER BY nome";
    $risultato=mysql_query($query);

    while(
    $row=mysql_fetch_array($risultato)){

       
    $query2=$query ="SELECT campo1,campo2 ecc.. ... ... WHERE idAutore='".$row['IdAutore']."'";
       
    $risultato2=mysql_query($query2);
       while(
    $row2=mysql_fetch_array($risultato2)){
          echo 
    "$i ".$row2["testo"]."

    "

          
    $i++;
       }


    Ovviamente la prima soluzione (una sola query) è decisamente la migliore
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  8. #8
    Originariamente inviato da las
    ma perchè fai tutte queste query quando te ne basterebe una?
    Hai ragione...non ci ho pensato! cazzo, quanto sono scarso...

    Codice PHP:
    $query ="SELECT campo1,campo2 ecc.. ... ... ORDER BY nome";
    $risultato=mysql_query($query);
    $nomeAttuale="";
    while(
    $row=mysql_fetch_array($risultato)){
       if(
    $nomeAttuale!=$row['nome']){
          echo 
    "[b]".$row["nome"]."[/b]

    "
    ;
          
    $nomeAttuale=$row['nome];   
       }

       echo "$i ".$row["testo"]."

    "; 
       $i++;

    i dati saranno ordinati per nome, e con un if controlli se stai passando al nome successivo lo stampi, altrimente stampi solo il testo.

    Se poi vuoi proprio fare 2 query almeno la seconda costruiscila dentro il ciclo e falla mirata sul campo (possibilmente un id) in modo da tirare fuori solo quello che ti serve.
    Quello che non riesco a capire è: cosa cambia se costruisco la query dentro o fuori del ciclo??? dovrebbe funzionare cmq.

    intanto grazie della disponibilità.

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.