Visualizzazione risultati 1 fino 27 di 27
Like Tree1Likes
  • 1 Post By mexonline

Discussione: Aiuto con classifica database...

  1. #1
    Guest

    Predefinito Aiuto con classifica database...

    Salve sto creando un sito, e ho creato un database per la classifica dei giocatori, l'utente dopo aver fatto il suo punteggio lo registra sul database, fin qui tutto bene.
    Poi volevo fare una pagina della classifica per vedere il primo in classifica ecc, ma il database non mette in ordine.. come devo fare? (sono alle prime armi, non incazzatevi D: )

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Devi utilizzare ORDER BY
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da miki92 Visualizza messaggio
    Devi utilizzare ORDER BY
    mmmh si, grazie :) però c'è una cosa ci sono 3-4 campi che registra e ci sono 2 che mi interessano, id: 1,2,3,4,5,ecc quindi la scaletta della classifica e appunto il punteggio, c'è un modo per mettere tipo quello con più punti con lo stesso id 1 poi il 2 ecc? perchè ora ho messo id auto increment, ma non è in ordine... è possibile o devo fare manualmente?

  4. #4
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Non ho capito molto della tua seconda parte. Vuoi modificare gli ID a seconda di chi ha più punteggio? O vuoi semplicemente ordinare gli ID che sarebbero il punteggio?

    Nel secondo caso basta aggiungere questo alla query: ORDER BY id

    In altri casi ti prego di essere più chiaro o di postare degli esempi o almeno la struttura del database.
    Apprezzi l'aiuto? Offrimi un caffè!

  5. #5
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    Lui ha gli id con auto incremento non usa l'id come punteggio
    se vuoi una classifica con primo, secondo e terzo posto non devi ordinarli per id ma per punteggio cioè ORDER BY nome_tabella_punteggio DESC

    Usando un ciclo while che ti riporta tutti i nomi

    DESC alla fine per ordinarli in modo decrescente
    ASC per l'ordinamento crescente

    Quindi se chiedi primo secondo e terzo devi usare DESC

    Questo mostrerà tutti i nomi in tabella nella pagina php

    Come vorresti tu cioè che l'id non si auto incrementi ma ti cambiasse come è la classifica lo puoi fare dopo aver preso l'ordine con un ciclo while nella pagina php

    Se non hai capito scrivi pure

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    Lui ha gli id con auto incremento non usa l'id come punteggio
    se vuoi una classifica con primo, secondo e terzo posto non devi ordinarli per id ma per punteggio cioè ORDER BY nome_tabella_punteggio DESC

    Usando un ciclo while che ti riporta tutti i nomi

    DESC alla fine per ordinarli in modo decrescente
    ASC per l'ordinamento crescente

    Quindi se chiedi primo secondo e terzo devi usare DESC

    Questo mostrerà tutti i nomi in tabella nella pagina php

    Come vorresti tu cioè che l'id non si auto incrementi ma ti cambiasse come è la classifica lo puoi fare dopo aver preso l'ordine con un ciclo while nella pagina php

    Se non hai capito scrivi pure
    Mmh, allora c'è id username e punteggio,
    id non devo più mettere auto increment, ma gli devo numerare a mano quindi?
    comunque, la mette in ordine di già la classifica solo che volevo numerare gli user, così da fare 1° 2° 3° ecc fino a quando non finiscono gli utenti.

  7. #7
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    Allora in una pagina php
    Ti connetti al db
    Selezioni l'username ordinandoli tutti tramite punteggio in ordine decrescente quindi order by punteggio DESC
    Inserisci un contatore che parte da 1 esempio $i=1;
    Apri il ciclo while
    Recuperi l'username con degli array
    Fai un update nel id dando al id valore $i inserisci un where dove fai l'update solo al utente con tale punteggio
    aumenti il contatore di 1
    Chiudi il ciclo while
    Devi togliere l'autoincremento nella tabella id

    Se hai problemi scrivi pure :)

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    Allora in una pagina php
    Ti connetti al db
    Selezioni l'username ordinandoli tutti tramite punteggio in ordine decrescente quindi order by punteggio DESC
    Inserisci un contatore che parte da 1 esempio $i=1;
    Apri il ciclo while
    Recuperi l'username con degli array
    Fai un update nel id dando al id valore $i inserisci un where dove fai l'update solo al utente con tale punteggio
    aumenti il contatore di 1
    Chiudi il ciclo while
    Devi togliere l'autoincremento nella tabella id

    Se hai problemi scrivi pure :)
    come? D: sono alle prime armi D: se puoi spiegami anche un po il codice :\

  9. #9
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    In questo modo l'id non è più autoincrementato ma sarà la classifica degli user

  10. #10
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    Aaa capito :) non conosci ancora bene i codici adesso è un pò tardi domani ti scrivo il codice con affianco cio che vanno a fare :)

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    Aaa capito :) non conosci ancora bene i codici adesso è un pò tardi domani ti scrivo il codice con affianco cio che vanno a fare :)
    sisi grazie :) gentilissimo, non volevo disturbare :)

  12. #12
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Ecco il codice interessato:

    Codice PHP:

    // Eseguo la query
    $query = mysql_query("SELECT * FROM nometabella ORDER BY punteggio DESC");

    // Ciclo i risultati
    $n = 0;
    while(
    $data = mysql_fetch_array($query){ $n++;

    // Mostro un ID crescente e l'username ed i punti
    echo $n." ".$data['username']." ".$data['punteggio'];

    }
    Apprezzi l'aiuto? Offrimi un caffè!

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da miki92 Visualizza messaggio
    Ecco il codice interessato:

    Codice PHP:

    // Eseguo la query
    $query = mysql_query("SELECT * FROM nometabella ORDER BY punteggio DESC");

    // Ciclo i risultati
    $n = 0;
    while(
    $data = mysql_fetch_array($query){ $n++;

    // Mostro un ID crescente e l'username ed i punti
    echo $n." ".$data['username']." ".$data['punteggio'];

    }
    mmh quindi diciamo che l'id lo devo proprio togliere dal database vero? non penso serva...

  14. #14
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    puoi lasciare l'id se lo usi come classifica.. (aggiungendo un altra stringa di codice per fare l'update) se no non serve, i tuoi punteggi nella griglia sono di tipo INT?
    i tuoi punteggi come sono in media cioè: hanno parecchie cifre?
    inserisci per provare nel db un numero tipo 120 e poi inserisci 20 con due nomi... come ti vengongono ordinati?
    Ultima modifica di mexonline : 30-08-2014 alle ore 11.54.48

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    puoi lasciare l'id se lo usi come classifica.. (aggiungendo un altra stringa di codice per fare l'update) se no non serve, i tuoi punteggi nella griglia sono di tipo INT?
    i tuoi punteggi come sono in media cioè: hanno parecchie cifre?
    inserisci per provare nel db un numero tipo 120 e poi inserisci 20 con due nomi... come ti vengongono ordinati?
    non ho ben capito che devo fare... così:
    20 punteggi con 120 con due nomi? tipo paolo tizio 120
    giovanni rossi 120 ecc?


    (comunque va, non so cosa intendi te, quindi vediamo, magari miglioro :) )

  16. #16
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    nono solo due nuovi giocatori alla lista

    nome: tizio1 punteggio: 120
    nome: tizio2 punteggio: 20

    l'ordine dei due come ti viene?
    cè l'ordine se il tipo della griglia punteggio è
    varchar ti ordina come se fosse una parola lettera per lettera ordinando prima il numero 20 poi il 120 sballando la classifica
    INT invece te lo ordina in modo esatto (i numeri sono limitati se hai numeri grandi non entrano)

    una volta ho avuto anche io questo problema, se sei alle prime armi può capitare che i numeri non siano ordinati bene

    un esempio se uso varchar o longtext che possono ospitare grandi cifre
    un esempio con int con al massimo se non sbaglio 9 cifre

    c'è nel ordinamento devi considerare quanto è grande il numero che ospiterai nella tabella
    Ultima modifica di mexonline : 30-08-2014 alle ore 12.33.52

  17. #17
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    nono solo due nuovi giocatori alla lista

    nome: tizio1 punteggio: 120
    nome: tizio2 punteggio: 20

    l'ordine dei due come ti viene?
    cè l'ordine se il tipo della griglia punteggio è
    varchar ti ordina come se fosse una parola lettera per lettera ordinando prima il numero 20 poi il 120 sballando la classifica
    INT invece te lo ordina in modo esatto (i numeri sono limitati se hai numeri grandi non entrano)

    una volta ho avuto anche io questo problema, se sei alle prime armi può capitare che i numeri non siano ordinati bene

    un esempio se uso varchar o longtext che possono ospitare grandi cifre
    un esempio con int con al massimo se non sbaglio 9 cifre

    c'è nel ordinamento devi considerare quanto è grande il numero che ospiterai nella tabella
    so andato a vedere è int però è un minigioco tipo, non so se gli utenti arrivino a 11 cifre.. :\ se ci arrivano cambio e invece di mettere DESC metto ASC no?

  18. #18
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    se i numeri ti si fanno grandi sostituisci ORDER BY punteggio DESC con ORDER BY CAST(punteggio AS SIGNED) DESC
    al posto di INT in tabella metti VARCHAR o LONGTEXT
    ho notato molto tempo fa questo problema io uso un longtext per raccogliere dei numeri perchè da me sono elevati e volevo andare sul sicuro se però come dici i tuoi numeri sono bassi va bene anche lasciare tutto cosi :) che funziona
    Caparezza likes this.

  19. #19
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    se i numeri ti si fanno grandi sostituisci ORDER BY punteggio DESC con ORDER BY CAST(punteggio AS SIGNED) DESC
    al posto di INT in tabella metti VARCHAR o LONGTEXT
    ho notato molto tempo fa questo problema io uso un longtext per raccogliere dei numeri perchè da me sono elevati e volevo andare sul sicuro se però come dici i tuoi numeri sono bassi va bene anche lasciare tutto cosi :) che funziona
    ooh grazie :) però ho un altro problema comparso ora, anche se credo prima andasse: il punteggio è salvato in una label lo voglio mettere nel database.. ma invece di darmi il punteggio da sempre 0!
    questo è la parte di script di come viene inserito la label
    $_REQUEST['label_value'] . "','" . ovviamente poi continua

  20. #20
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    Non ho capito vorresti il punteggio nel database che aumenti e non resti sempre a zero?

  21. #21
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    Ok si rilegendo ho capito che intendi allora nella label tu hai il punteggio del utente, il suo nome ecc..
    Al di sotto di queste informazioni metti un codice php strutturato in questo modo:

    Codice PHP:
    //nella variabile $giocatore va il nome utente
    $giocatore="tizio1";

    //nella variabile $punteggio va il punteggio fatto
    $punteggio="14";

    // Connessione al db ecc..
    // Selezioni il database con il punteggio dell'utente

    $queryget = mysql_query("SELECT username, punteggio FROM nometabella where username='$giocatore'");
    $row = mysql_fetch_assoc($queryget);

    // Estraggo i valori senza ciclo while stavolta

    $punteggio_vecchio_db = $row['punteggio'];
    $utente_db = $row['username'];

    Aumento il punteggio nel db dell'utente + il punteggio attuale

    $punteggio_nuovo=$punteggio_vecchio_db + $punteggio;

    // Invio il nuovo punteggio all'
    utente (se guardi nel db non è più 0)

    $querychange = mysql_query("UPDATE nometabella SET punteggio='$punteggio_nuovo' WHERE username='$utente_db'");

  22. #22
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    Se serve aiuto scrivi pure ;)

  23. #23
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    Se serve aiuto scrivi pure ;)
    No, forse non hai capito.... allora io ho fatto tipo un minigioco, dove aumenta il punteggio in una label, quando ha finito di giocare e si è stancato, scrive nome utente e email, e preme invio e va alla pagina di inserimento, nel database inserisce tutto tranne il punteggio, che mette 0 perchè il valore dell'input è 0 (penso sia questo il motivo del perchè metta sempre 0)

  24. #24
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    Aaaa tu finendo di giocare e premendo invio perdi il valore (punteggio) nella label che risulta sempre 0 cioè il valore della variabile che ha il punteggio è vuota? Non penso utilizzi qualche stratagemma per conservare il punteggio dopo l'invio?. ma prima hai detto che funzionava l'aumento del punteggio però...

    Posta il codice del inserimento in database e del form d'invio se puoi..
    Ultima modifica di mexonline : 03-09-2014 alle ore 02.07.25

  25. #25
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    Aaaa tu finendo di giocare e premendo invio perdi il valore (punteggio) nella label che risulta sempre 0 cioè il valore della variabile che ha il punteggio è vuota? Non penso utilizzi qualche stratagemma per conservare il punteggio dopo l'invio?. ma prima hai detto che funzionava l'aumento del punteggio però...

    Posta il codice del inserimento in database e del form d'invio se puoi..



    <?php
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $database = 'classifica';

    $db = mysql_connect($host, $user, $password)
    or die ("impossibile connettersi al database $database");
    mysql_select_db($database,$db)
    or die ("impossibile connettersi al database $database");

    $query = "INSERT INTO Classifica" .
    "(Username, email, punti)" .
    "VALUES('" .
    $_REQUEST['Username']. "','" .
    $_REQUEST['Email'] . "','" .
    $_REQUEST['label_value'] . "')";


    if (!mysql_query($query, $db))
    {
    print("Attenzione, impossibile inserire il record");
    }
    else
    {
    print("Il record è stato inserito");
    }


    mysql_close($db);



    ?>

    <a href="http://forum.it.altervista.org/Index.html">Torna Alla Home :)</a>




    html:
    <form method="post" action="php/inserimento.php">

    Se sei nuovo, inviaci da qui il tuo punteggio!<br>
    Email:<input type="text" name="Email"><br>
    Username:<input type="text" name="Username"><br>
    Il tuo punteggio:<label id='label_value'>0</label>
    <input type='hidden' id='label_value' name='label_value' value='0'/><br>
    <input type="submit" value="Inviaci il record fatto :D">
    </form>

  26. #26
    mexonline non è connesso Utente giovane
    Data registrazione
    31-05-2014
    Messaggi
    70

    Predefinito

    ma nella pagina del form come mandi l'aggiornamento del punteggio? cioè nella label non deve restare sempre fisso il numero 0 nella value ci deve essere un codice a parte che lo fa cambiare.. a me funziona ho inserito anche i controlli per l'email e il nome per non avere punteggi anonimi o abusi..

    il codice che ho usato è questo per lo più come il tuo:
    ecco un esempio

    Codice PHP:
    <?php
    //qui va il punteggio ottenuto dal gioco
    $punteggio="130";
    ?>

    <form method="post" action="#">
    Se sei nuovo, inviaci da qui il tuo punteggio!<br>
    Email:<input type="text" name="Email"><br>
    Username:<input type="text" name="Username"><br>
    Il tuo punteggio:<label><?php echo $punteggio ?></label>

    <input type='hidden' id='label_value' name='label_value' value='<?php echo $punteggio; ?>'/><br>
    <input type="submit" name="ok" value="Inviaci il record fatto :D">
    </form>


    <?php
    $nome
    = $_POST['Username'];
    $email = $_POST['Email'];
    $punti = $_POST['label_value'];
    $ok = $_POST['ok'];

    if (
    $nome == "" and $ok){
    echo
    "inserisci un nome<br>";
    }
    if (
    $email == "" and $ok){
    echo
    "inserisci un email";
    }
    if (
    $nome == "" or $email == "" and $ok){
    }else{
    echo
    "ciao <b>$nome</b> la tua email <b>$email</b> e il tuo punteggio <b>$punti</b> sono stati inseriti in database";
    $insert = mysql_query("INSERT INTO nometabella (username, email, punti) VALUES ('$nome','$email', '$punti')");
    echo
    "<p><a href=\"http://forum.it.altervista.org/Index.html\">Torna Alla Home :)</a>";
    }
    ?>
    devi solo inserire il punteggio del minigioco all'inizio del codice, per non perderlo caso mai dopo un refresh della pagina crei una cookie con valore il punteggio e cosi puoi anche chiudere la pagina che il punteggio resta sempre li (sovrascrivendolo solo con una nuova partita)..

  27. #27
    Guest

    Predefinito

    Citazione Originalmente inviato da mexonline Visualizza messaggio
    ma nella pagina del form come mandi l'aggiornamento del punteggio? cioè nella label non deve restare sempre fisso il numero 0 nella value ci deve essere un codice a parte che lo fa cambiare.. a me funziona ho inserito anche i controlli per l'email e il nome per non avere punteggi anonimi o abusi..

    il codice che ho usato è questo per lo più come il tuo:
    ecco un esempio

    Codice PHP:
    <?php
    //qui va il punteggio ottenuto dal gioco
    $punteggio="130";
    ?>

    <form method="post" action="#">
    Se sei nuovo, inviaci da qui il tuo punteggio!<br>
    Email:<input type="text" name="Email"><br>
    Username:<input type="text" name="Username"><br>
    Il tuo punteggio:<label><?php echo $punteggio ?></label>

    <input type='hidden' id='label_value' name='label_value' value='<?php echo $punteggio; ?>'/><br>
    <input type="submit" name="ok" value="Inviaci il record fatto :D">
    </form>


    <?php
    $nome
    = $_POST['Username'];
    $email = $_POST['Email'];
    $punti = $_POST['label_value'];
    $ok = $_POST['ok'];

    if (
    $nome == "" and $ok){
    echo
    "inserisci un nome<br>";
    }
    if (
    $email == "" and $ok){
    echo
    "inserisci un email";
    }
    if (
    $nome == "" or $email == "" and $ok){
    }else{
    echo
    "ciao <b>$nome</b> la tua email <b>$email</b> e il tuo punteggio <b>$punti</b> sono stati inseriti in database";
    $insert = mysql_query("INSERT INTO nometabella (username, email, punti) VALUES ('$nome','$email', '$punti')");
    echo
    "<p><a href=\"http://forum.it.altervista.org/Index.html\">Torna Alla Home :)</a>";
    }
    ?>
    devi solo inserire il punteggio del minigioco all'inizio del codice, per non perderlo caso mai dopo un refresh della pagina crei una cookie con valore il punteggio e cosi puoi anche chiudere la pagina che il punteggio resta sempre li (sovrascrivendolo solo con una nuova partita)..
    niente scusa se ti ho fatto perdere tempo... avevo sbagliato io lo script quando da il punti, cioè aumentava il punteggio solo del label, non dell'input... scusa ancora..., problema risolto :D

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •