Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83

    Classifica che non viene visualizzata

    ciao a tutti! ho uno script che calcola la classifica di un campionato di pallacanestro...
    in pratica ho due tabelle nel mio database

    1. calendario_u17 che è la tabella dove c'è il calendario delle partite nella quale aggiorno il risultato delle partite col succedersi del campionato.
    Campi: id, id_giornata, squadra_home, squadra_visitor, point_home, point_visitor, data, ora

    2. squadre_u17 che è la tabella da dove prelevo il nome delle squadre per creare il calendario.
    Campi: id, nome, citta, casacca,foto, info

    Ora ho provato a riadattare questo script che ho trovato in rete e che originariamente era per un campionato di calcio ad un campionato di basket. Il codice è piu o meno lo stesso(ho modificato solo il nome delle variabili (es: gol_fatti diventa canestri_fatti)!
    questo il codice:

    Codice PHP:
    <?php
    include("includes/config.inc.php");
    $giocate="0";
    $vittorie="0";
    $pareggi="0";
    $sconfitte="0";
    $canestri_fatti="0";
    $canestri_subiti="0";
    $canestri_subiti_casa="0";
    $canestri_subiti_trasferta="0";
    $canestri_fatti_casa="0";
    $canestri_fatti_trasferta="0";
    $punti="0";
    $differenza_canestri="0";
    $nome_squadra="&nbsp";
    $id_squadra=0;
    define("_PUNTI",0);
    define("_DIFF_CAN",1);
    define("_VINTE",2);
    define("_NULLE",3);
    define("_PERSE",4);
    define("_CF",5);
    define("_CS",6);
    define("_CFC",7);
    define("_CSC",8);
    define("_CFT",9);
    define("_CST",10);
    define("_GIOCATE",11);
    define("_NOME_SQUADRA",12);
    define("_ID_SQUADRA",13);
    //Connessione al db mysql
    $db mysql_connect($db_host$db_user$db_password);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione. Verificare i parametri nel file config.inc.php");
    else {
    }
    //Selezione del database
    mysql_select_db($db_name$db)
    or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php"); //connessione al database

    $query_squadre "select id, nome from squadre_u17 order by id";
    $cursore_squadre mysql_query($query_squadre) or die(mysql_error());
    $tot_squadre mysql_num_rows($cursore_squadre);    
        
    //ciclo while per le squadre
        
    while ($riga_squadra mysql_fetch_row($cursore_squadre)){
        
    $id_squadra $riga_squadra[0];
        
    $nome_squadra $riga_squadra[1];
        
        
    //eseguo la query per le vittorie
        
    $query_vittorie "select * from calendario_u17 where ((squadra_home = " .
                             
    $id_squadra " and point_home > point_visitor) or (squadra_visitor = " .
                           
    $id_squadra " and point_visitor > point_home))";
        
        
    $cursore_vittorie mysql_query($query_vittorie)
        or die(
    mysql_error());
        
    $vittorie mysql_num_rows($cursore_vittorie);
        
        
    //eseguo la query per i pareggi
        
    $query_pareggi ="select * from calendario_u17 where ((squadra_home = " .
                    
    $id_squadra " and point_home = point_visitor) or (squadra_visitor = " .
                    
    $id_squadra " and point_visitor = point_home))";
        
    $cursore_pareggi mysql_query($query_pareggi)
        or die(
    mysql_error());
        
    $pareggi mysql_num_rows($cursore_pareggi);
        
    //eseguo la query per le sconfitte
        
    $query_sconfitte "select * from calendario_u17 where ((squadra_home = " .
                    
    $id_squadra " and point_home < point_visitor) or (squadra_visitor = " .
                    
    $id_squadra " and point_visitor < point_home))";
        
    $cursore_sconfitte mysql_query($query_sconfitte)
        or die(
    mysql_error());
        
    $sconfitte mysql_num_rows($cursore_sconfitte);

        
    $query_canestri_fatti_casa "select sum(point_home) from calendario_u17 where squadra_home = " .
                                  
    $id_squadra "";
        
    $cursore_canestri_fatti_casa mysql_query($query_canestri_fatti_casa)
        or die(
    mysql_error());
            if (
    $riga_canestri_fatti_casa mysql_fetch_row($cursore_canestri_fatti_casa)){
            
    $canestri_fatti_casa = (int) $riga_canestri_fatti_casa[0];
            }
        
    $query_canestri_fatti_trasferta "select sum(point_visitor) from calendario_u17 where " .
                                          
    "squadra_visitor = " $id_squadra "";
        
    $cursore_canestri_fatti_trasferta mysql_query($query_canestri_fatti_trasferta)
        or die(
    mysql_error());
            if (
    $riga_canestri_fatti_trasferta mysql_fetch_row($cursore_canestri_fatti_trasferta)){
            
    $canestri_fatti_trasferta = (int) $riga_canestri_fatti_trasferta[0];
            }
        
    $query_canestri_subiti_casa "select sum(point_visitor) from calendario_u17 where squadra_home = " .
                    
    $id_squadra "";
        
    $cursore_canestri_subiti_casa mysql_query($query_canestri_subiti_casa)
        or die(
    mysql_error());
            if (
    $riga_canestri_subiti_casa mysql_fetch_row($cursore_canestri_subiti_casa)){
            
    $canestri_subiti_casa = (int) $riga_canestri_subiti_casa[0];
            }
        
    $query_canestri_subiti_trasferta "select sum(point_home) from calendario_u17 where " .
                                  
    "squadra_visitor = " $id_squadra "";
        
    $cursore_canestri_subiti_trasferta mysql_query($query_canestri_subiti_trasferta)
        or die(
    mysql_error());
            if (
    $riga_canestri_subiti_trasferta mysql_fetch_row($cursore_canestri_subiti_trasferta)){
            
    $canestri_subiti_trasferta = (int) $riga_canestri_subiti_trasferta[0];
            }

        
    $punti $vittorie $pareggi;
        
    $differenza_canestri = ($canestri_fatti_casa $canestri_fatti_trasferta) -
                                                     (
    $canestri_subiti_casa $canestri_subiti_trasferta);
     
    $canestri_fatti $canestri_fatti_casa $canestri_fatti_trasferta;
     
    $canestri_subiti $canestri_subiti_casa $canestri_subiti_trasferta;

        
    $id_squadra--;

    // **********************************************************************************
    // ****************************** ATTENZIONE*****************************************
    //    L'ORDINE DI RIEMPIMENTO DELL'ARRAY CORRISPONDE AL SUO ORDINAMENTO, PERTANTO NON
    //                    CAMBIARE L'ORDINE DELLE SEGUENTI RIGHE!!!
     
    $tabellone[$id_squadra][_PUNTI] = $punti;
     
    $tabellone[$id_squadra][_DIFF_CAN] = $differenza_canestri;
     
    $tabellone[$id_squadra][_GIOCATE] = $vittorie $pareggi $sconfitte;
     
    $tabellone[$id_squadra][_VINTE] = $vittorie;
     
    $tabellone[$id_squadra][_CF] = $canestri_fatti;
     
    $tabellone[$id_squadra][_NOME_SQUADRA] = $nome_squadra;
     
    $tabellone[$id_squadra][_CFT] = $canestri_fatti_trasferta;
     
    $tabellone[$id_squadra][_CFC] = $canestri_fatti_casa;
     
    $tabellone[$id_squadra][_NULLE] = $pareggi;
     
    $tabellone[$id_squadra][_CS] = $canestri_subiti;
     
    $tabellone[$id_squadra][_PERSE] = $sconfitte;
     
    $tabellone[$id_squadra][_CSC] = $canestri_subiti_casa;
     
    $tabellone[$id_squadra][_CST] = $canestri_subiti_trasferta;
     
    $tabellone[$id_squadra][_ID_SQUADRA] = $id_squadra 1;
    // **********************************************************************************
     
    $id_squadra++;
    }

    echo 
    "<table border=2 width=100%>";
    echo 
    "<tr bgcolor=brown>[b]<td align=center><font color=white>[b]Squadra[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Giocate[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Vinte[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Nulle[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Perse[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Canestri fatti[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Canestri subiti[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Canestri fatti in casa[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Canestri subiti in casa[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Canestri fatti fuori casa[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Canestri subiti fuori casa[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Diff. canestri[/b]</font></td>";
    echo 
    "<td align=center><font color=white>[b]Punti[/b]</font></td>[/b]</tr>";

    reset($tabellone);

    array_multisort($tabellone,SORT_DESC,SORT_REGULAR);

    for (
    $id_squadra =0;$id_squadra<$tot_squadre;$id_squadra++){
     echo 
    "<tr bgcolor=white><td class='black' align=center>[b]" $tabellone[$id_squadra][_NOME_SQUADRA] . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_GIOCATE]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_VINTE]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_NULLE]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_PERSE]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_CF]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_CS]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_CFC]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_CSC]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_CFT]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_CST]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_DIFF_CAN]  . "[/b]</td>";
     echo 
    "<td class='black' align=center>[b]" $tabellone[$id_squadra][_PUNTI]  . "[/b]</td></tr>";
    }
    echo 
    "</table>";

    ?>
    Il problema è che non dà alcun tipo di errore e nonostante ci siano le giornate di calendario con i relativi risultati nella tabella calendario_u17 in ogni colonna della classifica viene stampato il valore 0!
    Avete qualche idea sul problema? grazie e a tutti voi buone feste!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Non voglio sembrare troppo cattivo... (vabbè Natale è passato... non devo essere buono :P) però questo codice andrebbe riscritto completamente.

    1) usa mysql_fetch_array invece di mysql_fetch_row. In questo modo avrai un array associativo e non avrai bisogno di tutti quei define, delle righe che non devi cambiare d'ordine e quant altro. Basterà semplicemente scrivere ad es:

    Codice PHP:
    $query_squadre "select id, nome from squadre_u17 order by id";
    $cursore_squadre mysql_query($query_squadre) or die(mysql_error());
    $tot_squadre mysql_num_rows($cursore_squadre);    
    //ciclo while per le squadre
    while ($riga_squadra mysql_fetch_array($cursore_squadre))
         {
         
    $id_squadra $riga_squadra['id'];
         
    $nome_squadra $riga_squadra['nome']; 
         } 
    2) Hai 7 query all'interno di un ciclo while che esegui per ogni squadra. Avendo, per esempio 20 squadre questo significherà 140 query da eseguire sul DB ogni volta che carichi la pagina!!!! (141 con quella per trovare le squadre) Forse un paio di left join renderebbero la cosa un po' più leggera per il database. Oppure dovresti ripensare la struttura delle tabelle.

    3) Perchè usare array_multisort quando puoi già ordinare la query usando ORDER BY?

  3. #3
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83
    inanzitutto grazie x avermi risposto!!
    x tutte le cose che hai scritto lo so benissimo...quello script come ho scritto nel primo post lo ho solo riadattato velocemente per le mie esigenze xke nn sapevo proprio come creare una classifica! cmq adesso lo modifico...
    mi potresti invece fare solo un esempio per l'uso del left join in questo script?
    grazie ancora!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401

    una possibile soluzione

    Ciao! Allora, ho ricreato in parte la tua tabella, con qualche campo in meno per semplicità.

    Ecco quello che ho io:

    codice:
    mysql> select * from squadre;
    +----+----------+
    | id | nome     |
    +----+----------+
    |  5 | squadra5 | 
    |  4 | squadra4 | 
    |  3 | squadra3 | 
    |  2 | squadra2 | 
    |  1 | squadra1 | 
    +----+----------+
    
    mysql> select * from calendario;
    +----+--------------+-----------------+------------+---------------+
    | id | squadra_home | squadra_visitor | point_home | point_visitor |
    +----+--------------+-----------------+------------+---------------+
    |  1 |            5 |               2 |          5 |             5 | 
    |  2 |            2 |               5 |         11 |             0 | 
    |  3 |            2 |               3 |         10 |             2 | 
    |  4 |            1 |               3 |          8 |             6 | 
    |  5 |            1 |               2 |          5 |             3 | 
    +----+--------------+-----------------+------------+---------------+
    5 rows in set (0.00 sec)
    Quindi in pratica:
    squadra 1 -> 2 vittorie
    squadra 2 -> 2 vittorie, 1 pareggio, 1 sconfitta
    squadra 3 -> 2 sconfitte
    squadra 4 -> nulla
    squadra 5 -> 1 pareggio, 1 sconfitta

    Con un po' di impegno potresti fare tutto con un unica megaquery... per il momento ti scrivo un esempio di sole 3 queries per ottenere i risultati voluti. 3 sono sempre meglio di 141!

    Nota che usando la funzione COUNT per calcolare il numero di vittorie/pareggi/sconfitte non c'è bisogno di usare mysql_num_rows. Faccio il count su id che è la chiave primaria (così dovrebbe essere + veloce)

    codice:
    mysql> SELECT s.nome, count(v.id) AS vittorie 
    FROM squadre AS s LEFT JOIN 
    (SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario) AS v 
       ON ((squadra_home = s.id AND point_home>point_visitor) 
             OR (squadra_visitor = s.id AND point_home<point_visitor)) 
    GROUP BY s.id;
    +----------+----------+
    | nome     | vittorie |
    +----------+----------+
    | squadra1 |        2 | 
    | squadra2 |        2 | 
    | squadra3 |        0 | 
    | squadra4 |        0 | 
    | squadra5 |        0 | 
    +----------+----------+
    5 rows in set (0.01 sec)
    
    mysql> SELECT s.nome, count(p.id) AS pareggi 
    FROM squadre AS s LEFT JOIN 
    (SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario) AS p
       ON ((squadra_home = s.id OR squadra_visitor = s.id) 
             AND point_home=point_visitor) 
    GROUP BY s.id;
    
    +----------+---------+
    | nome     | pareggi |
    +----------+---------+
    | squadra1 |       0 | 
    | squadra2 |       1 | 
    | squadra3 |       0 | 
    | squadra4 |       0 | 
    | squadra5 |       1 | 
    +----------+---------+
    5 rows in set (0.00 sec)
    
    mysql> SELECT s.nome, count(sc.id) AS sconfitte 
    FROM squadre AS s LEFT JOIN 
    (SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario) AS sc
       ON ((squadra_home = s.id AND point_home<point_visitor) 
             OR (squadra_visitor = s.id AND point_home>point_visitor)) 
    GROUP BY s.id;
    
    +----------+-----------+
    | nome     | sconfitte |
    +----------+-----------+
    | squadra1 |         0 | 
    | squadra2 |         1 | 
    | squadra3 |         2 | 
    | squadra4 |         0 | 
    | squadra5 |         1 | 
    +----------+-----------+
    5 rows in set (0.00 sec)

  5. #5
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83
    grazie mille! domani mi ci metto!

  6. #6
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83
    ciao! io ho provato ma in tutti i campi mi visualizza sempre 0!
    io domani parto quindi nn potro rispondere alla discussione x 4 giorni!
    se hai qualke idea sul xke faccia cosi prova a dirmela xke nn so piu dove mettere le mani!!
    il codice k ho riscritto è questo:

    Codice PHP:
    <?php
    include("includes/config.inc.php");

    //Connessione al db mysql
    $db mysql_connect($db_host$db_user$db_password);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione. Verificare i parametri nel file config.inc.php");
    else {
    }
    //Selezione del database
    mysql_select_db($db_name$db)
    or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php"); //connessione al database

    //query vittorie
    $query_vittorie "SELECT s.nome, count(v.id) AS vittorie FROM squadre_u17 AS s LEFT JOIN 
    (SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario_u17) AS v 
       ON ((squadra_home = s.id AND point_home>point_visitor) 
             OR (squadra_visitor = s.id AND point_home<point_visitor)) GROUP BY s.id"
    ;
    $vittorie mysql_query($query_vittorie$db);

    //query pareggi
    $query_pareggi "SELECT s.nome, count(p.id) AS pareggi 
    FROM squadre_u17 AS s LEFT JOIN 
    (SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario_u17) AS p
       ON ((squadra_home = s.id OR squadra_visitor = s.id) 
             AND point_home = point_visitor) GROUP BY s.id"
    ;
    $pareggi mysql_query($query_pareggi$db);

    //query sconfitte

    $query_sconfitte "SELECT s.nome, count(sc.id) AS sconfitte 
    FROM squadre_u17 AS s LEFT JOIN 
    (SELECT id, squadra_home, squadra_visitor, point_home, point_visitor FROM calendario_u17) AS sc
       ON ((squadra_home = s.id AND point_home<point_visitor) 
             OR (squadra_visitor = s.id AND point_home>point_visitor)) GROUP BY s.id"
    ;
    $sconfitte mysql_query($query_sconfitte$db);

    echo
    "<table border=\"1\" width=\"100%\">
        <tr><td>Nome squadra</td><td>Pareggi</td><td>Vittorie</td><td>Sconfitte</td></tr>"
    ;
    while (
    $row mysql_fetch_array($pareggi)) 
         { 
         
    $nome_squadra $row['nome']; 
         
    $pareggi2 $row['pareggi'];
        
    $row2 mysql_fetch_array($vittorie);
        
    $row3 mysql_fetch_array($sconfitte);
        
    $vittorie2 $row2['vittorie'];
        
    $sconfitte2 $row3['sconfitte'];
        echo 
    "<tr><td> $nome_squadra </td>";
        echo 
    "<td> $pareggi2 </td>";
        echo 
    "<td> $vittorie2 </td>";
        echo 
    "<td> $sconfitte2 </td>";
        echo 
    "</tr>";
        
         }
    echo
    "</table>";

    ?>
    ciao e buone feste!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Hmmmm.... prova dopo ogni query a scrivere:

    echo mysql_error();

    e vedi se ti dà qualche errore strano.

    PS: giusto per sicurezza... la tabella è piena vero?

  8. #8
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83
    certo! è piena!
    ho controllato di avere immesso i campi giusti ma sembra tutto perfetto e se faccio come dici tu con il mysql_error() non visualizza nessun errore...
    (se qualcuno oltre a nICO80 che finora è stato di grande aiuto avesse un idea sul problema provi a postarla!!)

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401

    strano...

    ho fatto copia e incolla del tuo codice (cambiato solo i parametri di connessione) e a me funziona perfettamente...

  10. #10
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83
    boh...forse sono i campi della tabella...tu in point_home e point_visitor che parametri hai messo?
    o forse è il mio db in locale che ha qualke problema!!

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.