Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho um ranking que uma página que lista 100 usuários por ordem de pontuação,gero essa lista com php normalmente mesmo.
Gostaria de em outra página gerar a colocação do usuário,como eu poderia estar fazendo isso?
eu teria que gerar um ranking com todos usuários,salvar o mesmo para depois verificar qual a posição do usuário,ou teria uma maneira prática de estar fazendo isso?
Obrigado!
Depende os dados estão vindo de um bd ou são estáticos ?
Estão vindo do banco de dados.
Tem uma tabela ao qual contém os dados do usuário e pontuação,ai nela gero o ranking normal,porém em outra página gostaria de estar gerando a posição atual do mesmo.
>
Estão vindo do banco de dados.
Tem uma tabela ao qual contém os dados do usuário e pontuação,ai nela gero o ranking normal,porém em outra página gostaria de estar gerando a posição atual do mesmo.
qual a diferença de rank pra posição atual?
e como é sua tabela?
>
qual a diferença de rank pra posição atual?
e como é sua tabela?
A tabela tem um campo chamado pontuacao,e na página do rank ele chama os 100 melhores de acordo com a pontuação do usuário.
Agora no caso da posição que será exibido em outra página será por exemplo:
Usuário: 200º
Usuário: 1752º
O exemplo acima seria exibido em outra página,o que é minha duvida,agora a página do rank é apenas uma classificação exibindo os 100 melhores.
Da uma olhada no link
>
Da uma olhada no link
http://www.fromdual.com/ranking-mysql-results
Essa parte eu consigo fazer,a minha duvida seria o seguinte,como posso mostrar a posição do usuário em uma outra página,exemplo:
Posição Ranking: Electronic - 1654º
Mostrar somente a sua posição no rank em outra página,entende,eu até saberia fazer isso,porém teria que gerar uma lista com todos os usuários e salvar a mesma,e isso seria suicida,por que se tiver 40M usuários,teria que fazer o mesmo com 40M.
Esse rank é baseado no valor de algum campo certo?
entao faz um select com cout(*) com a condição WHERE coluna <= pontos_do_usuario_com_ID_X
Ex:
SELECT count(*) FROM tab where coluna <= (select coluna from tab where ID = 17);
coluna é o que vc usa pra classificar
vai te retornar a posição dele
>
Esse rank é baseado no valor de algum campo certo?
entao faz um select com cout(*) com a condição WHERE coluna <= pontos_do_usuario_com_ID_X
Ex:
SELECT count(*) FROM tab where coluna <= (select coluna from tab where ID = 17);
coluna é o que você usa pra classificar
vai te retornar a posição dele
Seu exemplo deu certo,só tem um problema,veja o exemplo abaixo por favor.
1º Electronic - 220
2º Retur - 220
* Caso haja empate,o sistema mostra a posição do Retur como 1º e não como 2º,já a posição do Electronic ele já mostra corretamente,como posso estar resolvendo isso?
não deveria aparecer números iguais, já que ele esta contando a ordem, cada um tem a sua
e não sei qual seu critério de desempate
Electronic,então a solução para esse problema seria eu ordenar um critério para desempate?
1º Electronic - 220
2º Retur - 220
não sei como é sua tabela nem como vc fez o select
so sei que isso não era pra acontecer
como vc fez o select?
>
1º Electronic - 220
2º Retur - 220
não sei como é sua tabela nem como você fez o select
so sei que isso não era pra acontecer
como você fez o select?
Foi feita da maneira abaixo.
$query = $conn->prepare("SELECT COUNT(*) + 1 FROM usuarios WHERE pontuacao > (SELECT pontuacao FROM usuarios WHERE id = '".$usuario['id']."')");$query->execute();
$result = $query->fetch();>
Seu exemplo deu certo,só tem um problema,veja o exemplo abaixo por favor.
1º Electronic - 220
2º Retur - 220
* Caso haja empate,o sistema mostra a posição do Retur como 1º e não como 2º,já a posição do Electronic ele já mostra corretamente,como posso estar resolvendo isso?
como assim cara? aquele select só retorna uma linha.
baseado em que você diz que Return é o segundo?
no caso o Return está em primeiro junto com o Electronic, como você vai por ele em segundo se o único critério é a pontuação?
o que você usa pra desempatar?
>
não sei como é sua tabela nem como você fez o select
so sei que isso não era pra acontecer
Eu nao tinha considerado que poderia ter usuário com a mesma pontuação
entao isso era sim pra acontecer
kkkkkkkk
Certo,irei ajeitar aqui um critério de desempate.
Depende os dados estão vindo de um bd ou são estáticos ?