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

    Problema su classifica generale

    Ciao a tutti ho un problema di questo genere:
    sul mio sito ho una tabella voti composta dai seguenti campi:
    nome text
    migliore int
    peggiore int
    data date

    questo per gestire uno storico di voti di partite di calcetto.

    nel sito eseguo una classifica per data facendo:
    codice:
    mysql_query("SELECT * FROM voti WHERE data = '".$_POST['data']."'");
    dove $_POST['data'] viene passato da un form dove vengolo selezionate le date.

    Ora però vorrei creare una classifica generale però se faccio:
    codice:
    mysql_query("SELECT nome,migliore,peggiore FROM voti WHERE presenza='Si'ORDER by nome ASC");
    mi visualizza tutto, ma anche i nomi doppi...

    Io invece vorrei visualizzare il nome e la somma dei voti migliore / peggiore per ogni nome..

    esempio:
    nome migliore peggiore data
    fabio 2 0 01/01/2010
    giulio 0 1 01/01/2010
    paolo 1 0 01/01/2010
    fabio 1 0 02/01/2010
    giulio 0 0 02/01/2010
    paolo 0 1 02/01/2010

    il risultato in classifica generale dovrebbe contenere:
    fabio 2+1 0+0
    giulio 0+0 1+0
    paolo 1+0 0+1

    e così via.

    Avevo pensato di fare la somma dei migliore e dei peggiori per ogni nome.. ma visto che i nomi sono tanti ci sarebbe un'altra soluzione secondo voi?

    Grazie dell' aiuto

  2. #2
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Secondo me hai sbagliato a strutturare il db. Io avrei fatto una tabella con i nomi ed un'altra con i dati: migliore, peggiore e data.
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  3. #3
    purtroppo necessito di questa struttura per svariati motivi tecnici...
    ho provato in questo modo:
    Codice PHP:
    <?php
    $result 
    mysql_query("SELECT nome,migliore,peggiore FROM voti WHERE presenza='Si' ORDER by nome ASC");
            while (
    $rowsi mysql_fetch_array($resultMYSQL_NUM)) {
            echo 
    "<tr>";
            echo 
    "<td align='center' nowrap><img src=img/".$rowsi[0].".jpg height='75'></img></td>";
            echo 
    "<td align='center' nowrap>".$rowsi[0]."</td>";
            
    $sommamigliore mysql_query("SELECT sum(migliore) FROM voti WHERE nome = '"$rowsi[0]"'");
            echo 
    "<td align='center' nowrap>".$sommamigliore[0]."</td>";
            
    //echo "<td align='center' nowrap>".$rowsi[1]."</td>";
            
    $sommapeggiore mysql_query("SELECT sum(peggiore) FROM voti WHERE nome = '"$rowsi[0]"'");
            echo 
    "<td align='center' nowrap>".$sommapeggiore[0]."</td>";
            
    //echo "<td align='center' nowrap>".$rowsi[2]."</td>";
            
    echo "</tr>";
            }
        
    ?>
    però mi da il seguente errore:
    Parse error: syntax error, unexpected T_VARIABLE in C:\Programmi\EasyPHP-5.3.2i\www\classgen.php on line 26
    e la riga 26 sarebbe:
    codice:
    $sommamigliore = mysql_query("SELECT sum(migliore) FROM voti WHERE nome = '"$rowsi[0]"'");
    nel mio esempio in rowsi[0] ho il nome che mi serve... cosa c'è di sbagliato secondo voi?

  4. #4
    ho capito l'errore.. mancavano i "." prima e dopo di rowsi[0] nel select.. però il problema non cambia.. perchè nella classifica mi ritrovo i campi doppi... ho provato anche inserendo nel select un distinct di "nome" ma funziona solo se migliore e peggiore sono uguali
    qualche soluzione? grazie

  5. #5
    ce l'ho fatta con:
    codice:
    $result = mysql_query("SELECT nome,sum(migliore),sum(peggiore) FROM voti group by nome");
    Grazie cmq per l'interessamento

  6. #6
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Esatto, così è corretto e posso anche capire che tu abbia bisogno di quella struttura però in quel modo sprechi un mare di risorse! Buona lavoro.
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  7. #7
    ipotizzando di fare come dici tu però come dovrei associare la tabella con i nomi a quella con migliore peggiore e data? calcola che durante le votazioni vanno incrementati quei valori...

  8. #8
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    La struttura sarebbe questa:
    tabella nomi
    -ID
    -cognome
    -nome

    tabella migliore/peggiore
    -id
    -id_nome (qui dentro salvi l'id relativo alla persona, così le due tabelle sono collegate)
    -migliore
    -peggiore
    -data

    Così sarebbe più ordinato e ottimizzato perchè anzichè usare dei char o varchar (per nome e cognome) che vengono duplicati per ogni data, userai degli int (per id_nome) che sarà anch'esso un campo duplicato per ogni data ma int occupa molto meno che un char e poi hai le due cose separata, così se vuoi aggiungere un giocatore lo fai solo nella tabella dei nomi e volendo ci puoi mettere anche altri dati tipo: numero maglia, data di nascita, ruolo ecc. La mia idea è proprio quella di avere una tabella con tutti i dati dei giocatori ed una con i dati delle partite (migliore, peggiore, data, risultato finale ecc)
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  9. #9
    scusa la mia ignoranza ma non ho capito cosa intendi per :
    -id_nome (qui dentro salvi l'id relativo alla persona, così le due tabelle sono collegate)

  10. #10
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Praticamente nella tabella dei nomi avrai:
    codice:
    ID     NOME         COGNOME
    1       mario         rossi
    2       luca          bianchi        
    3      stefano       brambilla
    
    e nella tabella partite avrai:
    ID        MIGLIORE      PEGGIORE        DATA            ID_NOME
    1              2             0         01/02/2010           3 (cioè stafano brambilla)
    2              1             2         05/03/2010           2 (cioè luca bianchi)
    3              0             2         12/04/2010           3 (cioè stefano brambilla)
    4              0             1          21/05/2010          1 (cioè mario rossi)
    e così via.
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

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.