Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205

    while mysql_fetch_array più volte con la stessa query

    hola gente

    $query = mysql_query ("select * from categorie", $connessione);
    while ($results = mysql_fetch_assoc ($query)) {
    echo ("<pre>");
    print_r ($results);
    echo ("</pre><hr>");
    }while ($results = mysql_fetch_assoc ($query)) {
    echo ("<pre>");
    print_r ($results);
    echo ("</pre><hr>");
    }

    con il primo while mi scorre tutti i record e li stampa.. ma se volessi ripetere lo stesso while senza ripetere la query?

    mica devo fare un while unico per memorizzare il risultato in un array e poi un foreach per questo array ogni volta che voglio stampare l'array salvato? :master:

    non c'è una soluzione più pratica?

    .

  2. #2
    Prova con mysql_data_seek ad reinizializzare il risultato:

    codice:
    $query = mysql_query ("select * from categorie", $connessione); 
    while ($results = mysql_fetch_assoc ($query)) { 
    echo ("<pre>"); 
    print_r ($results); 
    echo ("</pre><hr>"); 
    }
    
    mysql_data_seek($query,0);
    
    while ($results = mysql_fetch_assoc ($query)) { 
    echo ("<pre>"); 
    print_r ($results); 
    echo ("</pre><hr>"); 
    }

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205
    Originariamente inviato da piero.mac
    Prova con mysql_data_seek ad reinizializzare il risultato:

    codice:
    $query = mysql_query ("select * from categorie", $connessione); 
    while ($results = mysql_fetch_assoc ($query)) { 
    echo ("<pre>"); 
    print_r ($results); 
    echo ("</pre><hr>"); 
    }
    
    mysql_data_seek($query,0);
    
    while ($results = mysql_fetch_assoc ($query)) { 
    echo ("<pre>"); 
    print_r ($results); 
    echo ("</pre><hr>"); 
    }
    funzia perfettamente

    intanto avevo risolto così

    codice:
    <?
    $connessione = mysql_connect($host,$user,$pass) or exit;
    $selezione = mysql_select_db($db,$connessione) or exit;
    
    $query = mysql_query ("select * from categorie", $connessione);
    
    while ($results = mysql_fetch_assoc ($query)) {
    $arrei[$results[id]][parent] = $results[parent];
    $arrei[$results[id]][nome] = $results[nome];
    }
    
    ?>
    
    <pre>
    <?php print_r ($arrei) ?>
    </pre>
    com'è questa come soluzione?
    considera un database di quasi diecimila record devo scegliere tra queste due soluzioni...
    come posso fare a testare i tempi di risposta del server?

    .

  4. #4
    boh??? in un caso peschi dal buffer di mysql, dall'altro da un array che pero' devi scrivere... sempre dati in memoria sono....

    prova a mettere un contatempo e dicci i risultati.


    $starttime=microtime();

    codice da controllare
    ....
    ....
    fine codice

    $endtime1=microtime();

    echo "Tempo di esecuzione: " . ($endtime1-$starttime) . " in millisecondi
    \n";

    banale ma indicativo.... :andr3a_docet:


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205
    mah.. sono pieno di dubbi
    certe volte la prima soluzione è più veloce, certe volte è più veloce la seconda... penso dipenda dal server... dovrei provarlo in locale :master:

    stavo provando anche con le possibilità incrociate tra for foreach while e do while.. ma escono risultati sempre diversi
    .

  6. #6
    Originariamente inviato da IcedGlow
    mah.. sono pieno di dubbi
    certe volte la prima soluzione è più veloce, certe volte è più veloce la seconda... penso dipenda dal server... dovrei provarlo in locale :master:

    stavo provando anche con le possibilità incrociate tra for foreach while e do while.. ma escono risultati sempre diversi
    Personalmente adotterei la prima che ti ho detto. L'occupazione della memoria e' minore. Se costruisci un arrei (sic!) occupi spazio sia per i record estratti sia per l'arrei....

    Per i tempi devi farti una media. Fai 1000 iterazioni dell'uno e dell'altro e poi dividi.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205
    Originariamente inviato da piero.mac
    Personalmente adotterei la prima che ti ho detto. L'occupazione della memoria e' minore. Se costruisci un arrei (sic!) occupi spazio sia per i record estratti sia per l'arrei....

    Per i tempi devi farti una media. Fai 1000 iterazioni dell'uno e dell'altro e poi dividi.

    potrebbe essere anche uguale... vi faccio sapere con la media
    .

  8. #8
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Originariamente inviato da piero.mac
    boh??? in un caso peschi dal buffer di mysql, dall'altro da un array che pero' devi scrivere... sempre dati in memoria sono....
    però intanto si possono liberare le risorse occupate da mysql con mysql_free_result
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  9. #9
    Originariamente inviato da chris
    però intanto si possono liberare le risorse occupate da mysql con mysql_free_result
    Ciao chris....

    E' vero l'avevo considerato, il boh! e' riferito a se fa prima dal buffer di mysql o dall'array. Credo dipenda dal numero delle volte che utilizza l'array o dalle operazioni che ci vuol fare su.

    E' per questo che gli ho chiesto di fare 1000 iterazioni, mi incuriosisce la risposta.

    Se si tratta solo di stampare le righe due volte ribadisco il boh! iniziale. tanto vale lasciar perdere l'array, .


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205
    il discorso è un po più complicato... il fatto è che non so per quante volte devo stampare tutta la query in una pagina.. potrebbero essere 2 come 1 sola.. come 10...

    adesso vi faccio sapere anche con mysql_free_result
    .

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.