Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143

    Classifica basata sui valori dell'ultima colonna

    Ho due tabelle (MySQL), giocatori e punteggi. In quest’ultima sono archiviati i punteggi annui. Una cosa del tipo:

    codice:
    |Giocatori|2002|2003|2004
    1 | 5 | 6 | 4
    Ho creato una classifica (in base ai punteggi dell’ultimo anno) in questo modo:

    Codice PHP:
    $estrai mysql_query("SELECT * FROM giocatori AS g, punteggi AS p WHERE g.giocatore_id =p.punteggi ORDER BY p.2004 desc");

    while (
    $row mysql_fetch_assoc($estrai)) {
        
    $nome $row['nome'];     
        
    $punteggio $row['2004'];
        
        if (
    $row['2004'] < $row['2003']) {
         
    $valore "-";
        }
        else if (
    $row['2004'] > $row['2003']) {
         
    $valore "+";
        }    
        else if (
    $row['2004'] == $row['2003']) {
         
    $valore "=";
        }    
        
    echo 
    "[b]".$nome."[/b] | ".$punteggio." ".$valore."
    \n"
    ;

    Ci sono però diversi problemi.

    1) Innanzitutto, nella query iniziale specifico direttamente io l’anno sul quale basare la classifica (ORDER BY p.04), quindi se aggiungo la colonna 2005 alla tabella punteggi, devo modificare manualmente il codice.

    2) Discorso simile per la variabile “$valore”. Se aggiungo 2005, non devo più confrontare 2004 con 2003, ma 2005 con 2004.

    So che devo ricorrere ai cicli e agli array, ma... mi sono perso dopo qualche tentativo.

    Consigli?

  2. #2
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, quindi tu, se non ho capito male, ogni volta che crei un anno nuovo aggiungi una colonna nella tabella punteggi?

  3. #3
    E' assolutamente errata la struttura del DB, non puoi mettere gli anni sulle colonne! La tabella punteggi dovrebbe contenere le colonne id_giocatore, anno e punteggio.

    ES:

    id_giocatore | anno | punteggio
    1 | 2002 | 5
    1 | 2003 | 6
    1 | 2004 | 4
    ...
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Originariamente inviato da satifal
    E' assolutamente errata la struttura del DB, non puoi mettere gli anni sulle colonne! La tabella punteggi dovrebbe contenere le colonne id_giocatore, anno e punteggio.

    ES:

    id_giocatore | anno | punteggio
    1 | 2002 | 5
    1 | 2003 | 6
    1 | 2004 | 4
    ...
    ti complichi meno la vita

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    @jcsnake
    Si esatto

    @satifal
    Quindi devo rifare tutto da capo...?

    Sulla tabella punteggi si appoggia una gran quantità di codice... riadattare tutto sarebbe traumatico...

    Già che il pasticcio è fatto, non si può trovare una soluzione senza andare a modificare tutto?

    Intanto vi ringrazio per le risposte!

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Per quanto la soluzione sia brutta, in qualche modo sono riuscito a metterci una toppa. Ora però è sorto un altro problema. Per stampare una tabella di tipo "Posizione - Nome del Giocatore - Punteggio", devo creare un ciclo for che mi dia i numeri delle posizioni (da 1 a 10).

    Il codice è questo:

    Codice PHP:
    $estrai_ultimoanno mysql_query('SELECT * FROM punteggi');
    $conta_anni mysql_num_fields($estrai_ultimoanno);
    $ultimoanno mysql_field_name($estrai_ultimoanno, ($conta_anni 1));
    $penultimoanno mysql_field_name($estrai_ultimoanno, ($conta_anni 2));

    /////////////////////////////////////////////////////

    $estrai mysql_query("SELECT * FROM giocatori AS g, punteggi AS p WHERE g.giocatore_id =p.punteggi ORDER BY p.$ultimoanno desc LIMIT 10");

    while (
    $row mysql_fetch_assoc($estrai)) {
        
    $nome $row['nome'];     
        
    $punteggio $row[$ultimoanno];
        
        if (
    $row[$ultimoanno] < $row[$penultimoanno]) {
         
    $valore "-";
        }
        else if (
    $row[$ultimoanno] > $row[$penultimoanno]) {
         
    $valore "+";
        }    
        else if (
    $row[$ultimoanno] == $row[$penultimoanno]) {
         
    $valore "=";
        }    
        
    echo 
    "<table style='border:1px solid black;' cellspacing='1'><tr>\n";
    echo 
    "<td>Posizione</td>\n";
    echo 
    "<td>Nome del Giocatore</td>";
    echo 
    "<td>Punti</td>";
    echo 
    "</tr>";
    echo 
    "<tr><td>"cosa ci metto qui?"</td> ";
    echo 
    "<td>".$nome."</td>";
    echo 
    "<td>".$punteggio."</td></tr>";
    echo 
    "</table>";

    Dove e come posso creare un ciclo che mi numeri le righe della tabella per indicare le varie posizioni?

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.