Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: query mostruosa

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    101

    query mostruosa

    salve, mi sto ccrucciando con una query di mysql
    una cosa del tipo:

    codice:
     
    "SELECT id, SUM(cartellini) AS cartellini, SUM(bonus) AS bonus, SUM(malus) 
    AS malus, SUM(assist) AS assist, SUM(goals) AS goals,
    SUM(goals+assist+bonus-cartellini-malus) AS totale FROM 
    punteggio  where id='$row[giocatore1]' or id='$row[giocatore2]' or id='$row[giocatore3]'
     GROUP BY id order by totale desc";
    ma a me serve qualcosa che mi ritorni, NON la somma di ogni singolo id, bensi la somma totale di tutti gli id.

    esempio:

    codice:
    id  cartellini assist  goals bonus   malus
    1      2         3       0     4       0
    2      0         5       0     0       0
    3      1         2       1     1       5

    con somma io intendo che mi dovrebbe tornare:

    (0+0+1)(3+5+2)+(4+0+1)-(2+0+1)-(0+0+5) = 8

    invece con la query che uso io mi torna altri dati.

    qualcuno saprebbe darmi una mano?

  2. #2
    Se ho ben capito è il campo ID che non ti serve.

    Se così è non dovresti metterlo mella select ed il problema si risolve.
    Ovviamente va tolto anche dalla group by.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    101
    purtroppo no..
    anche se tolgo l'id dalla select... da comunque sempre lo stesso risultato.

    il group by id devo lasciarlo

    mi sa che il problema è + complesso

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    241
    prova a sostituire WHERE con HAVING (e mettilo dopo GROUP BY)

    non ti conviene cambiare nome ai campi in select per evitare ambiguità?

    es.: SUM(cartellini) AS tot_cartellini

  5. #5
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    in base all'esempio che hai fatto la query è questa:
    codice:
    SELECT (SUM(cartellini) + SUM(bonus) - SUM(malus) + SUM(assist) + SUM(goals)) AS totale FROM 
    punteggio  where id='$row[giocatore1]' or id='$row[giocatore2]' or id='$row[giocatore3]'
    ORDER by totale DESC";
    l'uso di 'GROUP BY id' implica di fare la somma dei valori per ogni singola riga, e non i totali.




    think simple think ringo

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    101
    si questo si....il problema è che io ho diverse righe che possono contenere lo stesso ID.... id non è chiave primaria ma si riferisce all'id del giocatore in un altra tabella...
    quindi un giocatore puo avere + righe nella tabella punteggio.... una riga per ogni partita giocata (nel caso facesse punti...

    quindi se non faccio group by id.. non mi pare funzioni...

  7. #7
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    a queste condizioni puoi usare il GROUP BY:
    codice:
    SELECT (SUM(cartellini) + SUM(bonus) - SUM(malus) + SUM(assist) + SUM(goals)) AS totale FROM 
    punteggio  where id='$row[giocatore1]' or id='$row[giocatore2]' or id='$row[giocatore3]'
    GROUP BY id ORDER by totale DESC";
    think simple think ringo

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    101
    ho provato la query che mi hai proposto, purtroppo mi ritorna il totale si...ma per ogni id...
    io invece... ho bisogno che mi faccia anche la somma dei totali degli id selezionati.

    ad esempio... se ho 2 query poste dentro un while

    codice:
    SELECT (SUM(cartellini) + SUM(bonus) - SUM(malus) + SUM(assist) + SUM(goals)) AS totale FROM 
    punteggio  where id='$row[giocatore1]' or id='$row[giocatore2]' or id='$row[giocatore3]' 
    GROUP BY id ORDER by totale DESC";
    mi dovrebbe ritornare 2 numeri... cioè il totale delle somme di tutti gli id che rispondono al WHERE..

    invece la tua query mi ritorna come la mia precedente...cioè
    se gli id corrispondendi alla clausola WHERE sono 3 mi ritorna per ogni query...i 3 totali distinti per ogni id..

    cioè... con le 2 query... 6 risultati al posto dei 2 totali!

    non so se mi son spiegato.. o se devo fare un esempio pratico!

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    101
    praticamente deve farmi si la somma di tutte le righe con lo stesso ID, ma poi alla fine... quando ottengo una riga sola per ogni ID...
    mi deve sommare tutte le colonne di tutte le righe selezionate...

    dandomi un solo numero... un solo totale!

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    101
    codice:
    SELECT (SUM(cartellini) + SUM(bonus) - SUM(malus) + SUM(assist) + SUM(goals)) AS totale FROM 
    punteggio  where id='$row[giocatore1]' or id='$row[giocatore2]' or id='$row[giocatore3]'
    ORDER by totale DESC";
    l'uso di questa query è parzialmente corretto...nel senso che mi ritorna i numeri giusti...(mi fa la somma dei totali giusta)...

    ma purtroppo...trovandosi dentro ad un WHILE dove vengono selezionati i $row['giocatorex'] non mi ordina le squadre per totale dei punti,... ma mi da il punteggio per ogni squadra...

    ottenendo magari:

    1. -1
    2. 12
    3. 5
    4. -9

    in ordine della prima select da dove deriva il while

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.