• User

    Classifica con somma punteggi

    Buongiorno a tutti,
    avrei bisogno di un piccolo aiuto nella scrittura di un comando php.

    Ho un sito xoops con un modulo per quiz (Myquiz). Vorrei aggiungere una classifica generale che ordini gli utenti iscritti sommando tutti i loro risultati ai quiz.

    I risultati vengono salvati in una tabella nel mio db mysql (viene registrato username, id, id del quiz e altre informazioni). Nella classifica generale mi interessa solo l'username e il punteggio. Così ho preparato una tabella myquiz_scoreboard nella quale ho messo due campi: username e score.

    Quando viene compilato il quiz, lo script inserisce il risultato anche in questa nuova tabella. Ora... Visto che grazie a precedenti impostazioni l'utente più rispondere ad ogni quiz una sola volta, vorrei aggiungere qualche riga che mi permetta di sommare il punteggio se l'username è già presente nella tabella myquiz_scoreboard.

    Esempio:

    tabella myquiz_scoreboard:

    username score

    chiara 5
    michela 8
    picaciu 4

    Se ora picaciu (che ha già risposto ad un quiz e ha totalizzato 4 punti... poverino...) compila un nuovo quiz e totalizza 6 punti, può lo script dire al db:
    guarda se l'username picaciu c'è già e in quel caso somma 6 al suo precedente score?

    Spero di essere stata chiara...

    Questo è il pezzo di script che ho aggiunto per registrare i risultati nella tabella scoreboard. è quello che penso andrà modificato...

    # inserisci nella classifica
            $ctime = time();
            if(!$xoopsDB->query("INSERT INTO ".$xoopsDB->prefix("myquiz_scoreboard")." VALUES ('$logname','$score')"))
            {
                    echo $xoopsDB->errno(). ": ".$xoopsDB->error(). "<br>";
                    return;
            }
    

    grazie

    Chiara


  • Moderatore

    Ciao.

    Devi prima di tutto controllare se l'utente ha un punteggio.
    (magari fai la query e controlli che il valore di mysql_affected_rows() sia maggiore di 0)

    se no fai fare la query che hai segnalato,
    se sì fai un update aggiungendo al vecchio valore quello nuovo.

    :ciauz:


  • User

    Ciao Massy,
    grazie mille per la risposta! Ho provato a cercare nel manuale php come fare quello che mi hai scritto... il mio problema è che non ho mai fatto niente di simile e che quel pezzo di script che sono riuscita a fare l'ho modificato a partire da uno esistente (sono stata la prima a stupirmi del fatto che funzionasse!). :lol:
    Saresti così gentile da scrivermi in pratica lo script da aggiungere?
    Grazie, scusa il disturbo
    Chiara :bho:


  • User

    Se nel futuro cercando qualcosa di simile qualcuno arrivasse al mio post metto qui la soluzione che ho trovato.

    $ctime = time();
    $qry="SELECT score FROM ".$xoopsDB->prefix("myquiz_scoreboard")." WHERE username='$logname'";
    $res=mysql_query($qry);
    mysql_num_rows($res)>0 ? $rws=mysql_fetch_row($res) : $rws=0;
    
    if($rws) {
       $sommapunteggio=$rws[0]+$score;
       $qry2="UPDATE ".$xoopsDB->prefix("myquiz_scoreboard")." SET score='$sommapunteggio' WHERE 
    
    username='$logname'";
       mysql_query($qry2);
    } else (!$xoopsDB->query("INSERT INTO ".$xoopsDB->prefix("myquiz_scoreboard")." VALUES ('$logname','$score')"));
    

    Grazie a tutti
    Chiara


  • Moderatore

    Grazie a te 🙂