Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68

    Contare record con gli stessi valori

    Ciao a tutti,
    risolto un problema, se ne pone un'altro.
    Ecco cosa devo fare che attualmente sto facendo con codice php ma che con mysql si risparmia codice e sicuramente è più corretto.
    Allora, data una tabella con 3 campi dove sono inseriti in modo anche disordinato:

    In pratica in questa tabella vengono inseriti i nomi degli autisti, le relative entrate e le relative uscite.
    I nomi degli autisti possono essere tanti e anche inseriti molte volte, per cui avrei la necessità di estrarre ad esempio una sola volta il nome dell'autista Mario, sommando però tutte le sue entrate e uscite, l'autista Antonio sommando tutte le sue entrate e uscite e così via in modo da trovarmi alla fine della query con un array e crearmi così una tabella come questa quì sotto.
    Qualche aiuto?

    Grazie
    Federico

    Autista Entrate Uscite
    Mario 40 10
    Antonio 80 15
    Pietro 35 8

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Ti fai una vista sulla tabella
    - raggruppata per autista
    - sommata su Entrate
    - sommata su uscite

    più o meno cosi:

    SELECT
    Autista,
    Sum(Entrate) AS SomEnt,
    Sum(Uscite) AS SomUsc
    FROM
    Tabella
    GROUP BY
    Autista
    ;

    Mi auguro che tutti i nomi siano scritti sempre identicamente nello stesso modo .......
    diversamente avrai un' altro problema

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Grazie nman,
    funziona perfettamente.
    Ora se alla query dovessi aggiungere di sommare alla stessa maniera un campo TIME della tabella e formattarlo correttamente per l'output, come è meglio procedere?
    Io ho aggiunto un altro Sum alla query, fa la somma dei vari record, ma la formattazione non mi viene corretta.

    SELECT
    Autista,
    Sum(Entrate) AS SomEnt,
    Sum(Uscite) AS SomUsc
    Sum(TempoSosta) AS SomSosta
    FROM
    Tabella
    GROUP BY
    Autista
    ;



    Supponiamo di avere 2 orari di questo tipo 01:30:00 e 00:40:00
    Mi aspetto che mi ritorni 02:10:00, invece mi ritorna 17000.
    Ho letto su un altro forum che se il campo è di tipo TIME, si fa una normale SUM e il risultato dovrebbe già essere formattato alla giusta maniera e cioè hh:mm:ss e invece no.
    Prima utilizzavo questa funzione per sommare gli orari:

    function somma($time1, $time2){
    //$time1 e $time2 devono essere nel formato "oo:mm:ss"


    $t1=explode(":",$time1);
    $t2=explode(":",$time2);


    //Senza considerare l'overflow
    $sec=$t1[2]+$t2[2];
    $min=$t1[1]+$t2[1];
    $ora=$t1[0]+$t2[0];


    //Effettuo il controllo sull'overflow
    //61sec=1min+1sec ecc...
    $min+=floor($sec/60);
    $ora+=floor($min/60);


    //Elimino l'overflow
    $sec=fmod($sec,60);
    $min=fmod($min,60);
    $ora=fmod($ora,24);


    //Aggiungo gli zeri ai valori minori di 10
    $sec=($sec<10 ? "0" : "").$sec;
    $min=($min<10 ? "0" : "").$min;
    $ora=($ora<10 ? "0" : "").$ora;


    $time=$ora.":".$min.":".$sec;
    return $time;
    }


    Devo utilizzare ancora questa funzione o è possibile fare direttamente con mysql?

    Grazie ancora
    Federico

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Risolto il problema con questo codice

    SELECT
    Autista,
    Sum(Entrate) AS SomEnt,
    Sum(Uscite) AS SomUsc,
    SEC_TO_TIME(SUM(TIME_TO_SEC(TempoSosta))) AS SomSosta
    FROM
    Tabella
    GROUP BY
    Autista

    Ora funziona perfettamente...grazie lo stesso
    Federico

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.