Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    mysql group by o altro?

    Ciao a tutti!
    Io ho una tabella così realizzata:

    id|user|scoreA|scoreB

    Ed ogni volta che l'utente si collega viene aggiunta una riga a questa tabella, con id chiave primaria autogenerata, ad esempio:

    NULL,aleritty,NEG,1400

    I valori di Score (sia A che B) possono essere numeri, oppure se uguali o inferiori allo 0 viene inserito "NEG".

    Ora, io avrei bisogno in un grafico di sapere quanti utenti hanno almeno un punteggio positivo e quanti utenti hanno esclusivamente punteggi negativi.

    Avete qualche spunto per realizzare una query che mi tiri fuori anche solo uno dei due valori?


    Io avevo provato:
    SELECT `scoreA` FROM `punteggi` GROUP BY user

    Sperando che il group by ordinasse i valori e mi restituisse sempre il valore più lungo (il campo è di tipo varchar) che sarebbe il numero (dato che i punteggi partono da 1000 se sono positivi). Invece non funziona...
    Can You See Curtains? Then Isn't Windows!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Bo, prova a partire da questo spunto

    codice:
    select user,
    sum(if(score='neg',1,0)) as negativi,
    sum(if(score<>'neg',1,0)) as positivi, 
    count(score) as tot_voti
    from (
    select user,scoreA as score from tabella
    union all
    select user,scoreB from tabella
    ) as t
    group by user

  3. #3
    L'idea è ottima, ma mi da dei risultati sballati nel senso che (faccio l'esempio solo del primo utente) 32 totali, 14 negativi e 18 positivi, mentre questo utente ha solo "NEG" in database...
    In effetti questa query mi tira fuori valori un po' strani... Provo ad elaborarla! Ma se usassi qualcosa come "MAX"? su un campo varchar se io lancio un "MAX" dovrebbe restituirmi il valore più lungo no?
    Can You See Curtains? Then Isn't Windows!

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Mi sembra strano.
    Posta un piccolo dump con qualche record che riproduca il problema che dici così lo vediamo.

  5. #5
    codice:
    user	negativi	positivi	tot_voti
    37	14	18	32
    46	11	2	13
    99	7	0	7
    117	13	2	15
    Ti prendo ad esempio l'utente '37' (si, non va per nomi utenti la tabella ma per id utente)

    codice:
    user	scoreA
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    37	NEG
    e questo era il risultato di:
    SELECT user,scoreA FROM tabella WHERE user=37 AND scoreA != ''

    Azzo, ho capito l'inghippo! Alcuni score sono vuoti e nella tua query vengono contati come positivi! Scusa, colpa mia che non te lo ho detto!

    In ogni caso, a me basta che mi venga tirato fuori l'id utente se nella colonna scoreA c'è anche solo un valore che contenga un numero in modo che poi io lato php possa andare a contarmi il numero di record restituiti ed ottengo il numero di utenti che hanno almeno uno score positivo... Poi sottraggo dai totali ed ottengo i negativi, mi sembra concettualmente più semplice no?

    Però non so come dirgli di restituirmi l'user se nella colonna scoreA c'è almeno un valore numerico (o un valore che non sia ne NEG ne vuoto...)
    Can You See Curtains? Then Isn't Windows!

  6. #6
    Anzi, la cosa migliore sarebbe di farmi restituire tutti gli user, con NEG se gli score A sono tutti NEG oppure con POS (o altro) se almeno uno dei record è un numero... In questa maniera con un semplice switch me la caverei dal lato PHP.
    Can You See Curtains? Then Isn't Windows!

  7. #7
    up
    Can You See Curtains? Then Isn't Windows!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.