Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [Mysql] problema statistiche, inner join e count

    Ciao, è tanto che non avevo bisogno il vostro aiuto ma ora sono incappato in un problemino.

    Ho 2 tabelle, giocatori e stats, dove in giocatori c'è nome cognome id id_squadra ecc.
    e dove in stats ci sono le statistiche di ogni partita giocata da un tale giocatore, quanti gol fatti subiti, ammunizioni ecc..

    ora volevo allestire una statistica generale di tutti i giocatori con il totale dei gol fatti subiti ecc..

    ho creato questa query

    Codice PHP:
    $query "SELECT giocatori.id, giocatori.id_squadra, giocatori.nome, giocatori.cognome, giocatori.ruolo, count(stats.partite), count(stats.voto), count(stats.sostituzione), count(stats.gf) AS gf, count(stats.gs), count(stats.miglior_giocatore), count(stats.ammunizione), count(stats.espulsione), count(stats.infortunio)
    FROM stats INNER JOIN giocatori
    ON stats.id_giocatore = giocatori.id WHERE stats.id_giocatore=giocatori.id AND stats.giocato='Giocato' GROUP BY giocatori.id ORDER BY giocatori.nome"

    ovviamente order by sarà variabile, si potrà dover allineare per gol fatti ecc.

    il risultato dello script è che mi fa la somma un po' di tutto in maniera molto sfasata.

    se qualcuno sa come fare thx mille!

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    attento che group by e' simile al comportamento della distinct.

    non e' che oridna per il campo ma distingue e unisce tutte le righe in una (in base agli ordinamenti) .

    Group by si usa come clausola quando devi contare con mysql per esempio una tabella con n riche dove i campi sono uguali puoi gruppare tutte le righe in 1 e contare qunate ce ne sono facendo medie dei valori e/o altre operazioni direttamente da query.

    Magari cosi' e' meglio

    SELECT

    giocatori.id,
    giocatori.id_squadra,
    giocatori.nome,
    giocatori.cognome,
    giocatori.ruolo,
    count(stats.partite) played,
    count(stats.voto) vote ,
    count(stats.sostituzione) changed,

    count(stats.gf) AS gf,
    count(stats.gs) gs,
    count(stats.miglior_giocatore) mvp,
    count(stats.ammunizione) amm,
    count(stats.espulsione) goout,
    count(stats.infortunio) broken

    FROM
    stats
    LEFT JOIN
    giocatori
    ON
    stats.id_giocatore = giocatori.id

    WHERE
    stats.id_giocatore=giocatori.id
    AND
    stats.giocato='Giocato'

    GROUP BY
    giocatori.id

    ORDER BY giocatori.nome


    CMq mi smebra strana la query anche perche' effettui dei count dove dovrebbero esserci dei SUM() ma nn conoscendo come hai messo i dati nel db nn saprei dirti meglio

  3. #3
    i dati sono circa cosi
    giocatori semplicissima

    id xx
    nome pippo
    cognome lacaccia
    ecc

    stats

    id xx
    id_giocatore xx
    gf 3
    gs
    partite 1

    ecc.. cÈ una riga per ogni partita giocata siccome ha dei voti per ogni partita

    comunque grazie mille per l'info, provo subitissimo!

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    ok allora per sommare i valori tipo gol subiti devi usare sum e non count.
    Count conta le occorrenze mentre sum somma i valori della colonna.

  5. #5
    mito!

    funziona, giusto, ora però ho un altro piccolo problemino, sicuramente una stupidata

    in una campo delle statistiche ho il valore "on" oppure "" vuoto

    sul campo "miglior_giocatore" inteso come miglior giocatore della partita, quindi nelle statistiche generali di tutti i giocatori, calcolando tutte le partite

    nella colonna "volte migilor giocatore" dovrebbe esserci il numero, quindi 3 volte, o 10 volte, contanto quandi "on" ci sono.

    Come potrei fare?

    grazie mille per ora, ottimo aiuto

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    devi usare i costrutti condizionali di mysql IF etc controlla la documentazione sul sito uffciale fai una ricerca da google sinceramente ora nn saprei.

  7. #7
    i costrutti condizionali di mysql IF
    Ok thx, non pensavo si potessero creare condizioni caricando i dati, ottimo thx

  8. #8
    Vista l'elaborata statistica che devo fare

    mi È venuta in mente una cosa, dimmi che ne pensi

    e se io estraessi usando anche 2 o 3 query tutti i dati e faccio le medie e le somme, e poi aggiornassi una tabella nuova dedicata solo a quello, del tipo "statistiche_latoutente" con giÀ le relative somme?

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    SIsi si puo' fare mysql ha un sacco di istruzioni. puoi anche crearti procedure mysql da lanciare con triggers, puoi creare delle tabelle chiamate view che restano in memoria e ti riorganizzano i dati come preferisci e secondo me per fare quello che devi sono comode.

    Cmq trovi tutto nel manuale di mysql.

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Hai risp 2 sec prima di me.

    si per questa cosa la sol e' buona e questa cosa la fai con l'istruzione create view.

    Una volta creata la view tale tabella virtuale rimane in memoria del server e si aggiorna costantemente. Quindi dopo fai una query sulla view e otterrai con una singola query i risultati.

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.