Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) MYSQL - Classificação de highscore


Evandro Gomes

Pergunta

Eae galera, tudo bem?

Eu estou com um probleminha aqui que ta realmente me dando bastante dor de cabeça (acredito que pra muitos aqui isso seria resolvido com uma mão nas costas)..

É o seguinte, eu sou desenvolvedor de jogos indie, a minha área é mais pra programação mesmo, não manjo de html, php, mysql etc etc, enfim meu problema é o seguinte: eu inseri um highscore online em um jogo que estou desenvolvendo (funciona perfeitamente), o problema mesmo ta na hora de classificar os dados, eu busquei e não encontrei como faz.. Vou ilustrar mais:

Supondo que lá no meu banco de dados eu tenha as seguintes entradas (por ordem de inserção):

2892 Diego

0199 Douglas

8279 Rafael

7289 Fábio

1829 Carlos

sendo 'Score' e 'NickName' respectivamente a identificação, a tabela é 'HighScore'

O query que classifica em ordem decrescente eu já entendi, eu usei:

"SELECT * FROM HighScore BY NickName DESC ORDER BY Score DESC"

e fica funcionando perfeitamente, o resultado é:

8279 Rafael

7289 Fábio

2892 Diego

1829 Carlos

0199 Douglas

O problema é o seguinte, supondo que o jogador 'Rafael' resolva jogar novamente e tenha a pontuação '5871', lá na tabela vai ficar com 2 registros do mesmo jogador, vai ficar assim:

2892 Diego

0199 Douglas

8279 Rafael

7289 Fábio

1829 Carlos

5871 Rafael

e na hora de classificar acontece isso:

8279 Rafael

7289 Fábio

5871 Rafael

2892 Diego

1829 Carlos

0199 Douglas

Ai que ta o erro, não é pra aparecer 2 vezes o Rafael, somente a maior pontuação dele.

em meus estudos eu localizei a função GROUP e inseri na query:

"SELECT * FROM HighScore GROUP BY NickName DESC ORDER BY Score DESC"

Esse group (pelo que eu entendi, me corrijam se eu estiver errado) agrupa a entrada, então quando tem nomes iguais ele junta todos em apenas 1..

"Aparentemente" funciona, o resultado fica sendo esse:

7289 Fábio

5871 Rafael

2892 Diego

1829 Carlos

0199 Douglas

O erro é que apareceu a ÚLTIMA pontuação do 'Rafael' e não a MAIOR.. Alguém saberia me informar qual a query eu uso, que função? Se eu não expliquei bem me avisem que eu encontro outra forma de ilustrar a minha situação.. o que eu não queria é ter que excluir as entradas, quero manter todas as pontuações (mesmo de jogadores repetidas pois pretendo fazer uma tela onde o jogador insere o nome e aparecem todas as pontuações enviadas por esse jogador).

Informações adicionais

A página de highscore do jogo:

http://www.gomferr.com.br/madspaceinvaders/?p=highscore

Se alguém puder me ajudar vou ficar eternamente grato, já revirei a internet em busca de soluções e nada, mas creio que minha pouca (ou quase nula) experiência com mysql dificulte as coisas.. hehe.. Enfim, a única coisa que eu posso oferecer é o nome na tela de 'Agradecimentos' do jogo..

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Oi Evandro,

Você quase acertou.

Use:

SELECT NickName, max(Score)  as SCORE
FROM HighScore
GROUP BY NickName
ORDER BY max(Score) DESC

Para mais informações sobre o uso da função MAX ou outras funções de agrupamento do MySQL, consulte o manual.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...