Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    433

    Aiuto per query con somma con condizione

    ciao , ho la seguente TAB

    Dettagli
    IDD (id dettaglio)
    IDC (id cliente)
    GIAC (valori da 0 a 2)
    MOD (valori da 0 a 2)
    COMUNICAZIONE (valori da 0 a 2)

    dato un IDC (id cliente) dovrei sapere quanti (e quindi la somma per singolo campo) dei campi GIAC MOD COMUNICAZIONE sono uguali a 1

    esempio
    3 GIAC
    2 MOD
    0 COMUNICAZIONE
    (3 record che hanno GIAC=1 , 2 record che hanno MOD=1 ecc...)


    io avevo fatto questa query

    Codice PHP:
    $avvisi="SELECT idd,idc,sum(giac) as agiac,sum(mod) as amod,sum(comunicazione) as acom from dettagli where idc='$idcl' and (giac=1 or modifica=1 or comunic=1) group by idc"
    il problema è che se per caso nello stesso record ad esempio GIAC=2 e MOD=1 mi sballa il conteggio della colonna giac poichè è valido il fatto che MOD=1...

    spero di avervi fatto capire , VI chiedo quindi

    si può fare tramite query questa somma o è meglio che faccia poi un ciclo sui risultati tramite PHP ???

    grazie
    Donerò loro dei fiori... poiché... sotto le nuvole... tutto è così rozzo e sporco

  2. #2
    Secondo me, facendolo con una singola query, ti complichi solo la vita: io ti consiglio di farlo con uno script php: ecco un esmpio...
    Codice PHP:
    <?php
    $idc
    ="l'id che ti interessa"
    $giac=0;
    $mod=0;
    $comunicazione=0;
    //Connessione
    $conn mysql_connect("tuohost""tuouser""tuapassword");
    mysql_select_db("mydbname")
    //Query
    $sql "SELECT * 
            FROM   tuatabella
            WHERE  idc = 
    $idc";

    $result mysql_query($sql);

    //effettuo un controllo per ogni riga con idc=$idc
    while ($row mysql_fetch_assoc($result)) {
      
    //se i campi che mi interessano sono uguali a 1, incremento le variabili corrisposndenti  
      
    if($row['giac']==1)
      
    $giac++;
      if(
    $row['mod']==1)
      
    $mod++;
      if(
    $row['comunicazione']==1)
      
    $comunicazione++;
    }
    //scrivo i risultati
    echo'"GIAC=$giac

              MOD=$mod

              COMUNICAZIONE=$comunicazione
    ";
    mysql_free_result($result);

    ?>
    In questo modo puoi facilmente anche adattare il sistema ad ogni evenienza.
    Spero di esserti stato utile!

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    433
    pensavo pure io una cosa del genere... ma so che qui ci sono dei MAGHI nelle query e si potesse fare...


    cmq... intanto faccio tramite php poi se qulc1 trova una query me la scriva!!!


    grazie quit10
    Donerò loro dei fiori... poiché... sotto le nuvole... tutto è così rozzo e sporco

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    Re: Aiuto per query con somma con condizione

    Originariamente inviato da Urbanus
    ciao , ho la seguente TAB

    Dettagli
    IDD (id dettaglio)
    IDC (id cliente)
    GIAC (valori da 0 a 2)
    MOD (valori da 0 a 2)
    COMUNICAZIONE (valori da 0 a 2)

    dato un IDC (id cliente) dovrei sapere quanti (e quindi la somma per singolo campo) dei campi GIAC MOD COMUNICAZIONE sono uguali a 1

    esempio
    3 GIAC
    2 MOD
    0 COMUNICAZIONE
    (3 record che hanno GIAC=1 , 2 record che hanno MOD=1 ecc...)


    io avevo fatto questa query

    Codice PHP:
    $avvisi="SELECT idd,idc,sum(giac) as agiac,sum(mod) as amod,sum(comunicazione) as acom from dettagli where idc='$idcl' and (giac=1 or modifica=1 or comunic=1) group by idc"
    il problema è che se per caso nello stesso record ad esempio GIAC=2 e MOD=1 mi sballa il conteggio della colonna giac poichè è valido il fatto che MOD=1...

    spero di avervi fatto capire , VI chiedo quindi

    si può fare tramite query questa somma o è meglio che faccia poi un ciclo sui risultati tramite PHP ???

    grazie
    Posta qualche record di esempio e il risultato che vorresti ottenere.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    433
    giusto esempio :

    tab
    Dettagli
    IDD (id dettaglio)
    IDC (id cliente)
    GIAC (valori da 0 a 2)
    MOD (valori da 0 a 2)
    COMUNICAZIONE (valori da 0 a 2)
    IDD - IDC - G - M - C
    231 - 300 - 1 - 2 - 0
    321 - 300 - 1 - 0 - 0
    123 - 300 - 0 - 1 - 1
    127 - 300 - 0 - 0 - 2
    357 - 300 - 1 - 1 - 0
    753 - 300 - 2 - 2 - 2
    785 - 300 - 0 -0 - 1
    147 - 400 - 0 - 0 - 0
    145 - 400 - 0 - 0 - 0

    dato il cliente 300 vorrei che mi uscisse

    giac = 3 (la somma dei tre 1)
    mod = 2 (la somma dei due 1)
    comunic = 2 (la somma dei due 1)
    Donerò loro dei fiori... poiché... sotto le nuvole... tutto è così rozzo e sporco

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    select idc,
    sum(if(gia=1,1,0)) as tot_gia,
    sum(if(`mod`=1,1,0)) as tot_mod,
    sum(if(comunicazione=1,1,0)) as tot_com
    from tabella
    where idc = 300
    group by idc

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    433
    nicola75ss

    sei un grande...


    ad ogni modo , che si potessero mettere le condizioni nel SUM proprio non lo sapevo,

    però non ho ben capito cosa sia il perchè del =1,1,0

    cosa rappresenta ? la sequenza di cosa?
    Donerò loro dei fiori... poiché... sotto le nuvole... tutto è così rozzo e sporco

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Semplicemente con l'if verifichi se ciascuno di quei tre campi ha valore pari a 1, in caso positivo aggiungi 1, in caso negativo 0 alla funzione esterna sum().

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.