Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1

    effettuare una somma su db MySQL

    Ho bisogno ancora del vostro aiuto, devo effettuare una serie di somme, ma qui mi basta capire come sommare un campo alla volta

    Uso questa query per estrapolare dei dati e fin qui tutto ok, solo che se provo ad aggiungere anche la funzione sum(), la query mi da errore, perché probabilmente sbaglio la sintassi.. potete aiutarmi?, vorrei capire come fare la somma della colonna movimenti.km

    select movimenti.km, movimenti.gasolio, movimenti.adblue, movimenti.id_luogo, movimenti.id_g, luoghi.luogo, giorni.giorno from movimenti left join giorni on giorni.id=movimenti.id_g left join luoghi on luoghi.id=movimenti.id_luogo where giorni.giorno between '2011-01-01' and '2011-10-01' and movimenti.id_autista=1 and movimenti.gasolio != '' and movimenti.adblue != '';

  2. #2
    Se ti servono tutti i record dei dati che hai in elenco non puoi fare un sum() nella stessa query. sum() e' una funzione di raggruppamento e quindi devi indicare il campo su cui eseguire la somma e indicare quali record sommare con GROUP BY.

    Ti verra' restituito solo un record raggruppato relativo a quel campo e non la lista di tutti i record. Un solo record casuale citato nel group by con il valore del sum(). Casuale perche' ti rende il primo record che trova fisicamente nella tabella che risponde alla condizione group by + il risultato del sum(). Ovviamente puoi usare la condizione where per limitare la ricerca come gia' stai usando.

    http://dev.mysql.com/doc/refman/5.1/...functions.html

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

  3. #3
    quindi devo creare un'altra query per usare sum giusto?, ora leggo il link che mi hai postato

  4. #4
    ok, grazie al tuo suggerimento sono riuscito ad ottenere i risultati corretti di due delle tre colonne che mi interessano. In una colonna, quella dei km (colonna di tipo float) o un bell'errore di calcolo/somma.

    Inanzitutto posto un pò di codice:

    Con questa query ottengo il primo risultato corretto che consiste nella tabella che mostra la data, luogo, km, gasolio e l'adblue:

    $sql = mysql_query("SELECT movimenti.km, movimenti.gasolio, movimenti.adblue, movimenti.id_luogo, movimenti.id_g, luoghi.luogo, giorni.giorno FROM movimenti LEFT JOIN giorni ON giorni.id=movimenti.id_g LEFT JOIN luoghi ON luoghi.id=movimenti.id_luogo WHERE giorni.giorno BETWEEN '$data1' AND '$data2' AND movimenti.id_autista = ('$user_id') AND movimenti.gasolio != '' AND movimenti.adblue != ''") or die(mysql_error());
    http://www.os4games.it/immagini/img_2.png

    ora, le query che utilizzo per l'adblu ed il gasolio (ne posto una sola perché tanto sono uguali, cambia solo il campo per la somma). Questa query é corretta per questi due campi ma per i km mi restituisce un errore inesatto:

    $sql_2 = mysql_query("SELECT movimenti.km, movimenti.adblue, movimenti.gasolio, movimenti.id_autista, movimenti.id_g, SUM(movimenti.gasolio) AS gasolio_totali FROM movimenti LEFT JOIN giorni ON giorni.giorno BETWEEN '$data1' AND '2011-10-01' AND giorni.id=movimenti.id_g AND movimenti.id_autista = ($user_id) AND movimenti.gasolio != '' AND movimenti.adblue != ''") or die(mysql_error());
    il problema consiste nel fatto che i km sono di tipo float e sum non va bene per i dati tipo float?

  5. #5
    ok, rettifico, anche le query per adblue e gasolio non sono corrette in quanto non riportano i risultati corretti nonostante il grab dimostri diversamente.. ovviamente sbaglio la query..

  6. #6
    be', float per un campo che necessita pochi decimali non lo vedo benissimo. Userei un decimal

    Per contare hai scordato di mettere il group by, senza ti conta tutta la tabella.

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

  7. #7
    quindi come devo modificare la query? , se mi aiuti mi fai un gran favore

  8. #8
    ho modficato la query in questo modo ma continuo a sbagliare..

    mysql_query("SELECT movimenti.km, SUM(movimenti.km) AS km_totali FROM movimenti LEFT JOIN giorni ON giorni.giorno BETWEEN '$data1' AND '$data2' AND giorni.id=movimenti.id_g AND movimenti.id_autista = ($user_id) AND movimenti.gasolio != '' AND movimenti.adblue != '' GROUP BY km") or die(mysql_error());

  9. #9
    Devi sommare le tre colonne, usare il where per determinare le condizioni, raggruppare per quello che ti serve. Che ne so ... autista, veicolo, marca...

    La query ultima che hai postato non ha senso. Prova una cosa del genere:

    codice:
    SELECT
    movimenti.id_autista,
    SUM(movimenti.km) AS km_totali,
    SUM(movimenti.gasolio) as gasolio_tot,
    SUM(movimenti.adblue) as adblue_tot
    FROM movimenti 
    LEFT JOIN giorni ON giorni.id=movimenti.id_g 
    LEFT JOIN luoghi ON luoghi.id=movimenti.id_luogo 
    WHERE giorni.giorno BETWEEN '$data1' AND '$data2' 
    AND movimenti.id_autista = ('$user_id') 
    GROUP BY  movimenti.id_autista
    non serve che tu metta gasolio e adblue != '' per due ragioni. la prima sono campi numerici e non stringhe, la seconda se zero sommano una cippa. Poi rimane che magari di gasolio non ne hanno messo ma di km ne hanno percorsi lo stesso. Se metti != da '' ti escluderebbe la conta dei km.

    per il tag usa [code ] o [php ] e non [quote ]

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

  10. #10
    si ma allora non capisco l'utilità di sum, cioé io voglio che lui calcoli la somma di una colonna, preferisco ora fare una colonna alla volta

    Il perché io abbia messo adblue != '', l'ho fatto per questo motivo: praticamente io voglio elencare la data, i km ed il luogo solamente dove hanno fatto rifornimento di gasolio e/o adblue. Quindi dove hanno fatto rifornimento, mostrare a quale km, in quale luogo ed in che giorno e qui tutto ok, perché con la prima query, dove c'e' allegata l'immagine, faccio proprio quello.. Poi,con la seconda query effettuare i totali di km, gasolio ed adblue. Con la seconda, come vedi ho dei problemi, devo fare le somme, solo che non ho capito perché per effettuare una ricerca ed una somma su di una colonna, devo fare la somma di tutte le colonne..

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.