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

    Come sto messo in classifica?


    Salve a tutti ragazzi,
    sto facendo, in un sito di giochi, un sistema di classifiche che mi sta creando un pò di problemi. Passo subito a spiegare e spero di riuscirci in maniera chiara.

    Diciamo che io GIOCATORE (una volta loggato) ho un mio pannellino personale in cui vedo la lista di tutti i giochi pubblicati nel sito ($tbl_giochi) e per ognuno di questi a quale ho giocato e in che posizione sto ($tbl_punti).
    Ma come fare?

    Ora .. il giocatore quando gioca registra il suo punteggio nella tabella $tbl_punti che è fatta di soli 3 campi: nick, nomegioco, punteggio.
    Come posso fare una pagina riepilogativa in cui ci sono tutti i giochi a cui ha giocato, il punteggio ottenuto e LA POSIZIONE in cui è piazzato?
    Devo fare una query per ogni gioco??

    Fino a che parliamo dei soli giochi a cui ha giocato è facile, con una select del tipo "where nick='$nick' order by gioco ASC" non c'è problema ... però come faccio a tirar fuori anche la posizione?

    Questa è una scheda tipo:
    ........................................
    Arkanoid - 2547pt - sei 12° in classifica!
    Pacman - 1248pt - sei 24° in classifica!
    Giuggerello - 987525 - sei 6° in classifica!
    Pointbreak - n/a - non hai ancora giocato a questo gioco!
    Superman - 21456pt - sei 2° in classifica!
    MarioBros - 54456pt - sei 4° in classifica!


    Grazie a chi saprà darmi quantomeno un'idea
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2
    Posta la strura della tabella perchè non è che abbia capito come è strutturata. Così potremo organizzare meglio il DB e raggiungere lo scopo.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    Originariamente inviato da mircov
    Posta la strura della tabella perchè non è che abbia capito come è strutturata. Così potremo organizzare meglio il DB e raggiungere lo scopo.
    Ti ringrazio prima di tutto per l'interessamento

    Allora,
    la tabella in cui scrivo i punteggi dei giocatori:

    classifiche.sql
    nickpt
    giocopt
    puntipt

    La tabella in cui inserisco i giochi:

    giochi.sql
    id
    nomegioco
    categoria
    hits


    La tabella in cui registro gli account utenti:

    user.sql
    nick
    pwd
    email
    status


    ...........................
    Riflessione personale.
    Se nella tabella degli account mettessi tanti campi quanti sono i giochi (al massimo 30) per registrarci il punteggio ad es:
    user.sql
    nick
    pwd
    email
    status
    gioco1
    gioco2
    gioco3
    gioco4
    gioco5

    Come detto, se un utente gioca al gioco 3 registro il punteggio nel campo gioco3 ... in questa maniera saprò i giochi a cui un utente ha giocato, i giochi a cui non ha giocato ...
    O faccio qualche errore logistico?

    Grazie per l'aiuto
    Perchè uso Maxthon? | Mi piace questa chat

  4. #4
    Allora. Prima cosa: nello pseudocodice del primo messaggio metti questo where: nick='$nick'. Io ti consiglio di far funzionare tutto con gli id. Quindi invece di registrare il nick del giocatore registri il suo id nel campo.

    Per saper i giochi che sono stati giocati e chi ci ha giocato crea una tabella (che potresti chiamare giocati) con i campi

    id
    nick
    gioco
    punteggio

    COSA SUCCEDE
    Quando un giocatore gioca ad un gioco e salva il puntggio salvi nella tabella i dati relativi. Quindi:

    id = l'id del record (autoincrement)
    nick = id del giocatore
    gioco = id del gioco
    punteggio = il punteggio registrato dall'utente

    Prima di inserire controlli se il giocatore ha già giocato a quel gioco: se già ci ha giocato allora aggiorni il punteggio altrimenti crei il record con i vari valori.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  5. #5
    Originariamente inviato da mircov
    Allora. Prima cosa: nello pseudocodice del primo messaggio metti questo where: nick='$nick'. Io ti consiglio di far funzionare tutto con gli id. Quindi invece di registrare il nick del giocatore registri il suo id nel campo.

    Per saper i giochi che sono stati giocati e chi ci ha giocato crea una tabella (che potresti chiamare giocati) con i campi

    id
    nick
    gioco
    punteggio

    COSA SUCCEDE
    Quando un giocatore gioca ad un gioco e salva il puntggio salvi nella tabella i dati relativi. Quindi:

    id = l'id del record (autoincrement)
    nick = id del giocatore
    gioco = id del gioco
    punteggio = il punteggio registrato dall'utente

    Prima di inserire controlli se il giocatore ha già giocato a quel gioco: se già ci ha giocato allora aggiorni il punteggio altrimenti crei il record con i vari valori.
    Ok .. è tutto chiarissimo .. ma ...
    come faccio a sapere a quali NON ha giocato se ho SOLO quelli a cui ha giocato in una tabella diversa da dove sono memorizzati i giochi?

    A questo punto non mi 'conviene', come dicevo prima, una tabella che ha tanti campi quanti sono i giochi?
    Esempio:

    user.sql
    nick ........................ Pasquale23
    pwd ........................ XXXXXXXX
    email ...................... mia@mia.com
    status ..................... 1
    pacman ...................... 21542
    tetris ........................ 54042000
    arkanoid ........................
    supermario ................. 124000
    gioco5 ......................


    ecc

    Le tabelle organizzate per ORIZZONTALE anzichè verticale, con molti campi ma meno righe ... è peggio o meglio?

    Grazie per il tuo supporto logistico
    Perchè uso Maxthon? | Mi piace questa chat

  6. #6
    Allora, ti rispondo prima alla seconda domanda.
    Quello che io ho fatto è normalizzare il DB. Sicuramente se tu analizzassi un altro po' le tabelle riusciresti a normalizzarlo ancora di più. La normalizzazione si fa per evitare la ridondanza di dati (per esempio nel tuo caso per i nick ti ritroveresti con dei nick ripetuti più volte e questo si chiama ridondanza. Utilizzando gli ID invece la ridondanza viene attenuata perchè capisci benissimo che un nick con 4 caratteri ripetuto 10 volte occupa molto più spazio del relativo id formato da molti meno caratteri!). Quindi è meglio utilizzare lo schema che ti ho suggerito io.
    Per la seconda domanda il modo c'è! Io ti ho dato l'inizio, tu cerca di trovare la fine!
    Un'altra cosa: per utilizzare la struttura che ti ho suggerito devi utilizzare left join (se cerchi nel forum c'è una discussione aperta proprio da me a riguardo).
    Se poi proprio non riesci allora vedrò di darti qualche altro "indizio". Bada, non è un quiz ma è solo per farti sforzare! In questo modo migliori e diventi sempre più autonomo fino a non avere più bisogno di farti spiegare per filo e per segno quello che devi fare!

    Edit

    Cmq non ti conviene creare un campo per ogni gioco per due motivi

    1) Se vuoi aggiungere qualche altro gioco? Non si può mai sapere come si evolverà il sito! Devi sempre pensare all'espandibilità!

    2) Sarebbe veramente palloso dover gestire la posizione di ogni gioco all'interno dei campi poichè lo stesso gioco per un nick potrebbe stare in una posizione (gioco 1) e per un altro nick starebbe in un'altra (gioco 10)!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  7. #7
    Originariamente inviato da mircov
    Allora, ti rispondo prima alla seconda domanda.
    Quello che io ho fatto è normalizzare il DB. Sicuramente se tu analizzassi un altro po' le tabelle riusciresti a normalizzarlo ancora di più. La normalizzazione si fa per evitare la ridondanza di dati (per esempio nel tuo caso per i nick ti ritroveresti con dei nick ripetuti più volte e questo si chiama ridondanza. Utilizzando gli ID invece la ridondanza viene attenuata perchè capisci benissimo che un nick con 4 caratteri ripetuto 10 volte occupa molto più spazio del relativo id formato da molti meno caratteri!). Quindi è meglio utilizzare lo schema che ti ho suggerito io.
    Per la seconda domanda il modo c'è! Io ti ho dato l'inizio, tu cerca di trovare la fine!
    Un'altra cosa: per utilizzare la struttura che ti ho suggerito devi utilizzare left join (se cerchi nel forum c'è una discussione aperta proprio da me a riguardo).
    Se poi proprio non riesci allora vedrò di darti qualche altro "indizio". Bada, non è un quiz ma è solo per farti sforzare! In questo modo migliori e diventi sempre più autonomo fino a non avere più bisogno di farti spiegare per filo e per segno quello che devi fare!

    Edit

    Cmq non ti conviene creare un campo per ogni gioco per due motivi

    1) Se vuoi aggiungere qualche altro gioco? Non si può mai sapere come si evolverà il sito! Devi sempre pensare all'espandibilità!

    2) Sarebbe veramente palloso dover gestire la posizione di ogni gioco all'interno dei campi poichè lo stesso gioco per un nick potrebbe stare in una posizione (gioco 1) e per un altro nick starebbe in un'altra (gioco 10)!
    Forum del Kaiser avevo scritto un pappardone ed è scaduta la sessione !!!

    Cmq riassumo (perdonami ma corro uffa!)

    1 - Sei un grande. Mi piacciono gli indizi ... difatti la mia questione è logistica e non di praticità
    2 - Left Join .. fico .. ci escludo le cose, le 'comparo' tra loro .. bello bello! E' da capire come utilizzarlo al meglio e la logica della sua operatività .. ma è attraente

    Rispondo di seguito alle tue risposte!
    1) Se vuoi aggiungere qualche altro gioco? Non si può mai sapere come si evolverà il sito! Devi sempre pensare all'espandibilità!

    2) Sarebbe veramente palloso dover gestire la posizione di ogni gioco all'interno dei campi poichè lo stesso gioco per un nick potrebbe stare in una posizione (gioco 1) e per un altro nick starebbe in un'altra (gioco 10)!
    Probabilmente non mi sono spiegato e me ne dispiace perchè magari ti ho fatto perdere tempo inutile.
    Io pensavo di fare una tabella costituita da 30 CAMPI (l'idgiocatore + 29 giochi) quindi se metto un gioco nuovo mi basterà mettere un campo in piu

    Esempio orizzontale:

    | IDGIOCATORE | TETRIS | PACMAN | MAJHONG | FLIPPER | ECC ECC |
    ........23..................23800................. .432111 ...................


    La mia domanda era la seguente: è sbagliato fare una tabella con 30 campi? E' pesante? Quali sono i contro?

    Mi metto subito al lavoro ...
    ancora grazie
    Perchè uso Maxthon? | Mi piace questa chat

  8. #8
    Ed è proprio quello che dico io! Devi fare una tabella in più! Come ti ho suggerito io invece ti basterà creare un pannellino di controllo che magari ti fa anche l'upload del gioco ed in questo modo gestisci tutto molto più semplicemente! Certo puoi fare anche come dici tu ma perchè complicarsi la vita? Cmq non credo ci siano particolari problemi. Alla fine la query è sempre una! Sono i comandi che cambiano.

    Il left join, siccome è un po' complicato (o almeno lo è stato per me) ti spiego come funziona.

    ES
    SELECT * FROM table1
    LEFT JOIN tabella2 ON tabella1.campo1 = tabella2.campo2

    Con questa query dici: voglio tenere l'intera tabella "tabella1" e unire la tabella "tabella2" quando questi due campi sono uguali.
    Se hai altri problemi, come già ti ho detto, posta! Sarò felice di aiutarti! Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

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.