Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Ottimizzazione Lettura MYSQL

    Salve !
    come posso gestire i dati estratti due volte ? (da evitare)
    in pratica con un primo ciclo devo creare una stringa con tutte le categorie e con un'altro ciclo organizzare i valori sulla stessa stringa:

    in pratica io avevo fatto (ma sembra non funziona - salvo mio errore ) :

    Codice PHP:
    $query "select categoria, valore from ....
    $risultato =  $db->loadQuery($query); 
    $risultato2 = $risultato

     while (
    $fetch=mysql_fetch_array($risultato)) {
           
    $stringa .=  $fetch['categoria'];   


     while (
    $fetch=mysql_fetch_array($risultato2)) {
           
    $stringa .=  $fetch['valore']; 
    Ho notato che così non funziona e ho dovuto necessariamente fare due letture (select)



    Codice PHP:
    $query "select categoria, valore from ....
    $risultato =  $db->loadQuery($query); 
     while (
    $fetch=mysql_fetch_array($risultato)) {
           
    $stringa .=  $fetch['categoria'];   

    $query = "select categoriavalore from ....
    $risultato =  $db->loadQuery($query); 
     while (
    $fetch=mysql_fetch_array($risultato)) {
           
    $stringa .=  $fetch['valore']; 
    Sono convinto che si può evitare anche perchè fanno parte della stessa tabella; purtroppo questo è un'esempio ma nel mio caso devo gestire due cicli separati per problema di organizzazione dati e creazione della $stringa;
    Come posso fare ?
    Grazie

  2. #2

    Re: Ottimizzazione Lettura MYSQL

    Originariamente inviato da Marcolino21
    Salve !
    come posso gestire i dati estratti due volte ? (da evitare)
    in pratica con un primo ciclo devo creare una stringa con tutte le categorie e con un'altro ciclo organizzare i valori sulla stessa stringa:

    in pratica io avevo fatto (ma sembra non funziona - salvo mio errore ) :

    Codice PHP:
    $query "select categoria, valore from ....
    $risultato =  $db->loadQuery($query); 
    $risultato2 = $risultato

     while (
    $fetch=mysql_fetch_array($risultato)) {
           
    $stringa .=  $fetch['categoria'];   


     while (
    $fetch=mysql_fetch_array($risultato2)) {
           
    $stringa .=  $fetch['valore']; 
    Ho notato che così non funziona e ho dovuto necessariamente fare due letture (select)



    Codice PHP:
    $query "select categoria, valore from ....
    $risultato =  $db->loadQuery($query); 
     while (
    $fetch=mysql_fetch_array($risultato)) {
           
    $stringa .=  $fetch['categoria'];   

    $query = "select categoriavalore from ....
    $risultato =  $db->loadQuery($query); 
     while (
    $fetch=mysql_fetch_array($risultato)) {
           
    $stringa .=  $fetch['valore']; 
    Sono convinto che si può evitare anche perchè fanno parte della stessa tabella; purtroppo questo è un'esempio ma nel mio caso devo gestire due cicli separati per problema di organizzazione dati e creazione della $stringa;
    Come posso fare ? Posso settare $risultato al primo elemento nuovamente e come ?
    Grazie
    (Scusate ho sbagliato, nel modificare ho fatto quota)

  3. #3
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Perché non fai tutto nel primo while?

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  4. #4
    Originariamente inviato da neroux
    Perché non fai tutto nel primo while?
    Non posso farlo, l'ho già detto ! perchè devo scorrere prima le categorie nell'esempio e concatenarle e poi tutti i valori corrispondenti (mi sfugge al momento un'altro modo);
    ma il problema non è questo è come posso rileggere il dataset partendo da capo ?

    Grazie

  5. #5
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Non si può fare (almeno in modo facile). Potresti salvare tutto in memoria e poi lavorare su questo. Ma come già scritto il modo più intuitivo sarebbe fare tutto nel primo while (non capisco perché non debba essere possibile).

    Comunque, se ci facessi vedere il query sarebbe molto più facile

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  6. #6
    io farei una cosa molto semplice

    codice:
    $query = "select categoria, valore from .... 
    $risultato =  $db->loadQuery($query);  
    
    $stringaCategorie = '';
    $stringaValori = '';
    while ($fetch = mysql_fetch_array($risultato))
    { 
        $stringaCategorie .=  $fetch['categoria'];
        $stringaValori .=  $fetch['valore'];
    }
    
    $stringa = $stringaCategorie . $stringaValori;
    Anche se:
    - ci metterei un bel mysql_free_result alla fine del while per liberare le risorse
    - non capisco a cosa ti serva concatenare, senza alcun separatore, le categorie prima ed i valori dopo
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Originariamente inviato da neroux
    Non si può fare (almeno in modo facile). Potresti salvare tutto in memoria e poi lavorare su questo. Ma come già scritto il modo più intuitivo sarebbe fare tutto nel primo while (non capisco perché non debba essere possibile).

    Comunque, se ci facessi vedere il query sarebbe molto più facile
    Ecco come ho fatto io; funziona tutto ma non mi piace perchè devo fare due letture e al momento non mi viene in mente nulla su come ottimizzare i dati e renderli compatibili su quello che voglio fare io; in pratica devo costruirmi la prima parte fatta in questo modo come una tabella (testata con tutte le categorie nel periodo): mese-anno=2=3=4=5=... e poi i valori sotto nel seguente formato corrispondente : 10-2012=20=30=40=50=.. e così via per altri mesi con i valori.
    Codice PHP:
    $query "SELECT distinct categoria FROM mytab WHERE categoria = $id and  DATE_FORMAT(data_lettura, '%Y-%m') between " ."'".$data_da."'"."and" ."'".$data_a."'"" order by categoria";
     
    $risultato $db->loadQuery($query); 
     
    $prima_volta 0;
     while (
    $fetch=mysql_fetch_array($risultato)) {
            if(
    $prima_volta == 0){
                
    $stringa .= "mese-anno"  ."="$fetch['categoria'];
                
    $prima_volta 1;
            }else{
               
    $stringa .=  "="$fetch['categoria']; 
            }
     }

    $query "SELECT distinct DATE_FORMAT(data_lettura, '%m-%Y') as data_store, categoria, sum(valore) as valore FROM mytab WHERE id_pass = $id and  DATE_FORMAT(data_lettura, '%Y-%m') between " ."'".$data_da."'"."and" ."'".$data_a."'"" Group by categoria, DATE_FORMAT(data_lettura, '%Y-%m') order by data_store, categoria ";
    $risultato =  $db->loadQuery($query); 
    $periodo_old "";
    while (
    $fetch=mysql_fetch_array($risultato)) {
            if(
    $fetch['data_store'] != $periodo_old){
                
    $periodo_old $fetch['data_store'];
                
    $stringa .=  " ";
                
    $stringa .=  $fetch['data_store'];   
             }
             
    $stringa .=  "="$fetch['valore'];  
     }
     
    $stringa .=  " "
    Grazie gentilissimo per aver risposto

  8. #8
    Originariamente inviato da daniele_dll
    io farei una cosa molto semplice

    codice:
    $query = "select categoria, valore from .... 
    $risultato =  $db->loadQuery($query);  
    
    $stringaCategorie = '';
    $stringaValori = '';
    while ($fetch = mysql_fetch_array($risultato))
    { 
        $stringaCategorie .=  $fetch['categoria'];
        $stringaValori .=  $fetch['valore'];
    }
    
    $stringa = $stringaCategorie . $stringaValori;
    Anche se:
    - ci metterei un bel mysql_free_result alla fine del while per liberare le risorse
    - non capisco a cosa ti serva concatenare, senza alcun separatore, le categorie prima ed i valori dopo
    Non va bene ! vedi l'esempio mio di come deve essere !

  9. #9
    Originariamente inviato da Marcolino21
    Non va bene ! vedi l'esempio mio di come deve essere !
    certo che non va bene ... ma dirlo prima come lo volevi esattamente avrebbe fatto risparmiare tempo a tutti -.-'

    tra l'altro il problema non è che solo i cicli sono differenti ... ma sono differenti anche le query!

    il mio consiglio è di tirar fuori una sola query e poi di elaborare tramite php i risultati
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Originariamente inviato da daniele_dll
    certo che non va bene ... ma dirlo prima come lo volevi esattamente avrebbe fatto risparmiare tempo a tutti -.-'

    tra l'altro il problema non è che solo i cicli sono differenti ... ma sono differenti anche le query!

    il mio consiglio è di tirar fuori una sola query e poi di elaborare tramite php i risultati
    Infatti è quello che vorrei fare per questo volevo un modo come accedere nuovamente a $risultato per rifare il ciclo.. ma ci deve essere un modo; come già detto io volevo salvare la variabile $risultato con il contenuto in $risultato2 e con questa rifare il ciclo; ma non va bene;
    Se vi viene in mente qualcosa fatemi sapere; io intanto vedrò di farmi venire qualche soluzione a riguardo e appena trovata lo posto.
    Grazie mille

    PS.: scusate .. ma non era mia intenzione far per perdere tempo a tutti.

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.