Sistema de alta pontuação do meu jogo de iphone

Eu tenho esse loop em PHP para selecionar todas as minhas pontuações do meu jogo a partir de uma tabela MySQL.

Minha consulta é:

$sql = "SELECT * FROM $table WHERE "; switch($type) { case "global": $sql .= "1 "; break; case "device": $sql .= "udid = '$udid' "; break; case "name": $sql .= "name = '$name' "; break; } $sql .= "ORDER BY $sort "; $sql .= "LIMIT $offset,$count "; $result = mysql_query($sql,$conn); 

O udid é um identificador exclusivo. E o loop:

  while ($row = mysql_fetch_object($result)) { echo '  '.$rank.'   '.$row->name.'   '.$row->score.'   '.$row->udid.'  '; $rank++; } 

Minha pergunta é simples, então uma pessoa pode ver dentro do jogo em qual posição ele é. “Como selecionar um ranking a partir de um udid , fora do loop”.

Talvez faça uma nova consulta que selecione o ranking de um udid ou configure uma variável no loop?

Veja como consultar o database para o ranking para o jogador udid 1 :

 SELECT COUNT(*) AS rank FROM tablename WHERE score > (SELECT score FROM tablename WHERE udid = 1) 

Estou assumindo que uma pontuação maior é melhor e você está apenas armazenando a maior pontuação para cada jogador.

Com um índice de score e udid , isso deve ser bastante rápido.

O que a consulta faz é contar o número de usuários que têm uma nota maior do que o usuário selecionado.

Se uma pontuação mais baixa for melhor, basta mudá-la para isso:

 SELECT COUNT(*) AS rank FROM tablename WHERE score < (SELECT score FROM tablename WHERE udid = 1) 

O que conta o número de jogadores com uma pontuação menor.

Leia tudo sobre índices do MySQL .

Uma opção é escrever uma function que calcula a sorting do usuário com base em todas as pontuações do outro e retornando. Então, chamando isso quando o usuário quiser ver sua sorting.

Tanto quanto eu sei, os jogos MMORPG (por exemplo) têm um campo de rank em seu database para cada jogador e eles usam um cron-job diário ou horário para atualizar esse ranking. Então, em vez de executar a function ‘calcular a sorting’ cada vez que um jogador apenas quer ver sua sorting, você precisará buscar o valor do campo.

EDITAR: código para a function (não se esqueça de adicionar o campo de rank à sua tabela DB)

Arquivo:

cronjob_update_rank.php:

 require 'config.php'; //Or whatever contains your config and DB connection. $rank = 1; //The best player ranked as 1 $getMembers = mysql_query("SELECT id FROM members ORDER BY `score` DESC"); while($mem = mysql_fetch_array($getMembers)) { mysql_query("UPDATE members SET rank='$rank' WHERE id='{$mem['id']}'"); $rank++; } 

Por favor note, é apenas um exemplo de código, você precisará personalizá-lo para suas necessidades.

Use o painel do servidor para criar um cronjob diário nesse arquivo. (ou peça para o seu suporte de provedor de hospedagem com ele).