Visualizzazione risultati 1 fino 17 di 17
Like Tree1Likes
  • 1 Post By mzanella

Discussione: Somma in unico risultato di più tabelle

  1. #1
    Guest

    Predefinito Somma in unico risultato di più tabelle

    Buonasera.
    Come si evince dal titolo, vorrei trovare una soluzione alla problematica di poter ottenere un risultato univoco su una colonna specifica che somma molteplici colonne in più tabelle.
    Ho cercato e provato con l'interrogazione UNION, ma non fa al caso mio, perchè mi riporta TUTTE le somme in più righe. Mi piacerebbe ottenere un risultato solo, considerando che ogni tabella ha colonne uguali (TABELLA_A, COLONNE 8 : TROTE,PGATTO ecc...) così per le altre...tutte uguali.

    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_A + TABELLA_B");
    Ma purtroppo questa interrogazione non viene accettata!

    Esiste qualcosa del genere che possa fare tale somma di colonne UGUALI in più tabelle?

    Grazie e buona serata!

  2. #2
    Guest

    Predefinito

    Esegui N volte la query

    Codice PHP:
    SELECT SUM(CAMPO) FROM TABELLA_X
    e poi via php sommi i vari risultati.

  3. #3
    Guest

    Predefinito

    Confesso che è stato il mio primo pensiero...confesso anche di aver pensato di provare...ma come si fa a tentare non sapendo cosa selezionare all'interno di un SELECT...cioè io seleziono una colonna per la somma e tale somma me la visualizza tramite un .[sum (CAMPO)].
    Dovrei prendere questo ultimo risultato e ... ma soprattutto FROM?

    casino mentale!

  4. #4
    Guest

    Predefinito

    Non ho capito cosa non hai capito...

    Tu scrivi che vorresti

    Codice PHP:
    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_A + TABELLA_B");
    Ti ho suggerito di fare più query

    Codice PHP:
    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_A");
    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_B");
    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_C");
    ...
    e sommare con php i risultati.

    Cosa non ti è chiaro?
    Cosa hai provato a fare?
    Cosa hai ottenuto?

  5. #5
    Guest

    Predefinito

    ho provato a fare questo :
    while($cicle=mysql_fetch_array($query1)) <----------- in teoria è qui che ho provato a modificare per sommare
    while($cicle=mysql_fetch_array($query1+$query2)) <--------- ma non funziona
    echo "<div class="center"> TOTALE" .$cicle['SUM(TROTE)']."</div>"; <------- risultato a video della somma

  6. #6
    Guest

    Predefinito

    ho provato anche così :
    while($TROTE=mysql_fetch_array($TROTE))
    echo "<div class="center"> TOTALE" .$TROTE['SUM(TROTE)']."</div>";

    ma mi restituisce solo 1 risultato di 1 tabella invece che 2 ... ho inserito momentaneamente 2 tabelle per prova

  7. #7
    Guest

    Predefinito

    noto adesso, dopo svariate prove, che interroga solo la seconda query....non capisco

    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");
    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_2"); <---- IL RISULTATO A VIDEO DI SOLO QUESTA!
    while($cicle=mysql_fetch_array($query)){
    echo "<div class="center"> TOTALE" .$cicle['SUM(TROTE)']."</div>";

    }

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da acccremona Visualizza messaggio
    noto adesso, dopo svariate prove, che interroga solo la seconda query....non capisco

    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");
    $query = mysql_query("SELECT SUM(TROTE) FROM TABELLA_2"); <---- IL RISULTATO A VIDEO DI SOLO QUESTA!
    while($cicle=mysql_fetch_array($query)){
    echo "<div class="center"> TOTALE" .$cicle['SUM(TROTE)']."</div>";

    }
    Certo che fa solo quella.
    In quel modo prima definisci la variabile $query con un valore e subito dopo gli assegni un secondo valore senza aver prima eseguito la query.

  9. #9
    Guest

    Predefinito

    ho provato così
    $query1 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");
    $query2 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_2");
    while($cicle=mysql_fetch_array($query1))
    while($cicle=mysql_fetch_array($query2))
    echo "<div class="center"> TOTALE" .$cicle['SUM(TROTE)']."</div>";
    dandomi sempre lo stesso risultato...ho provato a togliere il while tenendo questi parametri:
    $query=mysql_query($query1)) ma niente da fare...
    ho inoltre provato a metterli così :

    $query1 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");
    while($cicle=mysql_fetch_array($query1))
    $query2 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_2");
    while($cicle=mysql_fetch_array($query2))
    niente....

    io non so più cosa fare!

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    io non so più cosa fare!
    Suggerisco di partire dalla nomenclatura. Potrà sembrare l'ultimo dei problemi, ma sono convinto che dare i nomi corretti alle entità aiuti. Ad esempio:
    Codice PHP:
    $query1 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");
    quella che tu chiami $query1 non è una query, ma il risultato di una query.
    Codice PHP:
    $cicle=mysql_fetch_array($query2)
    Cos'è un cicle? Il risultato di mysql_fetch_array rappresenta una riga di una tabella, non un ciclo.

    Ciò detto, quello che vuoi ottenere è eseguire tante query quante sono le tabelle, accumulando le somme in una variabile:
    Codice PHP:
    // Variabile in cui accumulare le somme
    $totale = 0;

    // "Preparazione" delle query
    $queries = array();
    $queries[] = "SELECT SUM(TROTE) FROM TABELLA_1";
    $queries[] = "SELECT SUM(TROTE) FROM TABELLA_2";
    ...
    $queries[] = "SELECT SUM(TROTE) FROM TABELLA_N";

    // Esecuzione delle query ed aggiornamento della somma
    foreach ($queries as $query) {
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    $totale += $row['SUM(TROTE)'];
    }
    Ci sono poi tutti gli abbellimenti del caso: usare mysqli o PDO, controllare i valori di ritorno e la presenza di errori, evitare -se possibile- di scrivere le query a mano, e così via.
    vplaza likes this.

  11. #11
    Guest

    Predefinito

    Grazie mzanella per il supporto.
    Provando quello che mi hai proposto, la pagina rimane bianca senza che le interrogazioni riportino alcun risultato...sicuramente sbaglierò qualcosa nell'inserimento...ma fino ad ora la pagina non riporta risultato alcuno, il che suppone che non ci sono errori.

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quando effettui delle prove, dovresti inserire
    Codice PHP:
    error_reporting(E_ALL);
    all'inizio del codice PHP per abilitare la stampa di tutti gli errori e degli avvisi.

    Ricorda di controllare i valori di ritorno delle funzioni per sincerarti che non si siano verificati errori durante le interrogazioni.

    Utilizza var_dump($totale) (o almeno echo $totale) per stampare il risultato: devi in ogni caso ottenere un numero, fosse anche 0, non una pagina completamente bianca.

  13. #13
    Guest

    Predefinito

    lo "0" l'ho ottenuto...

  14. #14
    Guest

    Predefinito

    cioè mi sembra assurdo non riuscire ad unire un risultato cumulativo e di non trovare niente in rete per cercare almeno una scorciatoia a questa problematica.

    Da quello che mi sembra di aver capito dal codice che hai scritto è che cambia poco da quello che avevo postato io...
    $query1 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");
    $query2 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_2");
    while($cicle=mysql_fetch_array($query1))
    while($cicle=mysql_fetch_array($query2))
    echo "<div class="center"> TOTALE" .$cicle['SUM(TROTE)']."</div>";

    se non per alcuni giri di "Esecuzione delle query ed aggiornamento della somma" che portano ad un totale.
    l'istruzione "while($cicle=mysql_fetch_array($query1))" non va a richiamare questa interrogazione "$query1 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");" ?

    se si, perchè allora se immetto più interrogazioni mi da solo un totale?

    Il codice da te gentilmente mandato, non fa la stessa cosa?
    fammi capire perchè sono al momento FERMO e FRUSTRATO!

  15. #15
    Guest

    Predefinito

    ho inserito questo :
    echo "<div class=> TOTALE" .$row['SUM(TROTE)']."</div>";

    e ottengo 2 totali delle 2 TABELLE...

    devo capire come ottenerne 1 solo univoco!

  16. #16
    Guest

    Predefinito

    foreach ($queries as $query) {
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    $totale += $row['SUM(TROTE)'];
    echo "<div class="center"> TOTALE" .$totale+=$row."</div>";

    Mi da 2 risultati, il primo e il secondo attaccati...il secondo risultato è quello voluto, devo eliminare la comparsa a video del primo!

  17. #17
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Da quello che mi sembra di aver capito dal codice che hai scritto è che cambia poco da quello che avevo postato io...
    Al contrario, sono molto diversi. Curando di più l'indentazione del codice si vede più chiaramente:
    Codice PHP:
    while($cicle=mysql_fetch_array($query1))
    while(
    $cicle=mysql_fetch_array($query2))
    echo
    "<div class="center"> TOTALE" .$cicle['SUM(TROTE)']."</div>";
    Innanzitutto non stai accumulando niente: da nessuna parte indichi che il totale è dato dalla somma di risultati che provengono da due tabelle, banalmente non c'è nulla di simile a $totale_tabella1 + $totale_tabella2.
    Inoltre, non c'è nessun motivo per usare i cicli while. Le tue interrogazioni restituiscono un'unica riga, entrambi i cicli eseguono una sola iterazione e terminano necessariamente.
    Infine, usi la stessa variabile $cicle per scopi diversi: nel ciclo while esterno stai dicendo "indico che $cicle è la riga corrente del record set dato da query1", subito dopo, nel ciclo interno, stai dicendo "no, ho cambiato idea: $cicle adesso rappresenta la riga corrente del record set dato da $query2, intendo scartare completamente il risultato di $query1".

    l'istruzione "while($cicle=mysql_fetch_array($query1))" non va a richiamare questa interrogazione "$query1 = mysql_query("SELECT SUM(TROTE) FROM TABELLA_1");" ?

    se si, perchè allora se immetto più interrogazioni mi da solo un totale?
    Non proprio, piuttosto va ad utilizzare il risultato dell'interrogazione. Il motivo per cui ottieni un solo totale è spiegato poco sopra: i due cicli non servono e sono comunque strutturati male.

    Mi da 2 risultati, il primo e il secondo attaccati...il secondo risultato è quello voluto, devo eliminare la comparsa a video del primo!
    Inserendo la stampa (echo) all'interno del ciclo foreach, questa viene eseguita ad ogni iterazione. La stampa va posta alla fine (il che ti riporta al codice che ti avevo mostrato, e da cui suggerisco di ripartire).
    Inoltre, attento ai side effects: con la seguente istruzione
    Codice PHP:
    echo "<div class="center"> TOTALE" .$totale+=$row."</div>";
    non stai solo stampando, stai anche modificando il valore di $totale, falsando i risultati successivi!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •