[PHP] Sommare campi e aggiornare tabella

  • Creatore Discussione Creatore Discussione ltatas
  • Data di inizio Data di inizio

ltatas

Nuovo Utente
17 Apr 2009
38
0
6
Salve sto provando a fare questo ma ho qualche problemino.
Ho una tabella dove vengono indicati diversi parametri e devo sommare alcuni e poi aggiornare una seconda tabella
Quando eseguo

$row01=mysql_fetch_assoc(mysql_query("SELECT SUM(durata) FROM table WHERE origine='roma'"));

Se provo la singola select su SQL funziona ho il valore esatto ma se provo su una pagina PHP ottengo

ARRAY
 
ciao
prova a correggere così
PHP:
$row01=mysql_fetch_assoc(mysql_query("SELECT SUM(durata) as somma FROM table WHERE origine='roma'"));
echo $row01['somma'];
un consiglio: abbandona le vecchie istruzioni php mysql_... (deprecate) e passa alle nuove mysqli_...
 
Si ora va.
E se volessi aggiornare una seconda tabella dello stesso DB con il risultato?
Grazie
 
ciao
PHP:
//....
$row01=mysql_fetch_assoc(mysql_query("SELECT SUM(durata) as somma FROM table WHERE origine='roma'"));
$somma= $row01['somma'];

$query_stringa="UPDATE altra_tabella SET somma=$somma WHERE qui_lo_sai_tu='ma?'";
//ecc...
 
Mi risponde ARRAY

$row01=mysql_fetch_assoc(mysql_query("SELECT SUM(durata) as somma01 FROM cdr WHERE origine='roma'"));
echo $row01['somma01'];

$min_roma="UPDATE orari_minuti SET min_tot=$row01 WHERE origine='roma'";
 
ciao
strano che ti risponda array, comunque fai questa prova
PHP:
$row01=mysql_fetch_assoc(mysql_query("SELECT SUM(durata) as somma FROM table WHERE origine='roma'"));
echo "<pre>";//serve solo per visualizzare meglio l'output
var_dump($row01);
var_dump($row01['somma']);
echo "</pre>"
e posta quanto ti riportano i due var_dump
 
Dimenticavo di dirti che è una macchina , e che usa PHP 5 solo per generare report banali e/o comandi di controllo.
Ho fatto come mi hai detto tu ma la risposta è

E visualizzo

array(1) {
["somma01"]=>
string(5) "15594"
}
string(5) "15594"

Ho corretto il post xk ho copiato il tuo script e nel tuo manca il ; alla fine del secondo echo
 
Ultima modifica:
ciao
da quello che ho capito vuoi ottenere il totale di 'durata' nella tabella cdr e con quanto hai ottenuto uppare il campo min_tot della tabella orari_minuti, giusto?
intanto una cosa in tabella orari_minuti come hai settato il campo min_tot?
se a intero (int)
PHP:
$row01=mysql_fetch_assoc(mysql_query("SELECT SUM(durata) as somma01 FROM cdr WHERE origine='roma'"));
$durata= (int)$row01['somma01'];
$min_roma=mysql_query("UPDATE orari_minuti SET min_tot=$durata WHERE origine='roma'");
se invece l'hai settato come stringa (varchar)
PHP:
$row01=mysql_fetch_assoc(mysql_query("SELECT SUM(durata) as somma01 FROM cdr WHERE origine='roma'"));
$durata= $row01['somma01'];
$min_roma=mysql_query("UPDATE orari_minuti SET min_tot='$durata' WHERE origine='roma'"); //$durata tra gli apici

p.s.
non puoi usare direttamente $row01 in quanto è un array, ma l'elemento dell'array $row01['somma01']
come giustamente ti riportano i var_dump
 
se non devi utilizzare il risultato di somma intermedio, puoi gestire con una sola query,
PHP:
"
UPDATE orari_minuti
SET min_tot=(SELECT SUM(durata) FROM cdr WHERE cdr.origine=orari_minuti.origine)
WHERE origine='roma'
"
in questo modo puoi aggiornare più "origini" in una sola volta, casomai servisse
 
ciao @marino
giusto, ma un piccolo dubbio (non sulla tua query, ma in generale) se nella tabella che deve essere uppata (min_tot) il record con origine='roma' non esistesse cosa succede?
non si potrebbe implementare la query con INSERT.. ON DUPLICATE KEY ... UPDATE ?
 
Ciao allora aggiorno, in questo periodo sono molto incasinato e mi scuso per il ritardo per la risposta e il ringrazioamento.
Funziona, riesco ad aggiornare la tabella e fare quello che voglio.
Ultimo quesito, se volessi fare anche un array dove specifico tutte le destinazioni
$array = roma,milano,napoli,firenze,ecc ecc ecc
Come posso modificare in modo che che conteggi automaticamente tutto?
Grazie
 
Ciao no solo un elenco con tutte le destinazioni, mi serve per evitare di fare un copia e incolla con tutte le destinazioni ed inserire una variabile ogni destinazione.
Spero di essere stato chiaro
 
ciao
prova qualcosa del genere, sempre se ho capito bene quello che vuoi fare
PHP:
//.........
//ti ricavi le origini che hai registrate nella tabella
$origini=array();
$query="SELECT origine as citta FROM cdr GROUP BY origine";
$ris=mysql_query($query);
while($riga=mysql_fetch_assoc($ris)){
    $origini[]=$riga['citta'];//$origini[0]=>'roma', $origini[1]=>'milano' ecc....
}

foreach($origini as $citta){//cicli l'array che hai creato
    //query per la somma
    $q_s="SELECT SUM(durata) as somma01, origine as citta FROM cdr WHERE origine='$citta'";
    $ris_s=mysql_query($q_s);
    $row01=mysql_fetch_assoc($ris_s);
    $durata= $row01['somma01'];
    //query per uppare
    $q_u="UPDATE orari_minuti SET min_tot=$durata WHERE origine='$citta'";
    $ris_u=mysql_query($q_u);
    //eventuale verifica
    if($ris_u){
        echo "la durata della citt&agrave; di $citta &egrave; stata aggiornata<br>";
    }else{
        echo "errore nell'aggiornamento della citt&agrave; di $citta<br>";
    }
}
//......
dimenticavo:
per uppare puoi mettere la query che ti ha suggerito marino dentro il foreach, sostituento a 'roma' $citta
 

Discussioni simili