Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Retur

Ranking

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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();

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Negrito
      Olá Pessoal, 
       
      Converti o banco de dados de uma app em ASP Classico de MSSQL para MySQL para redução de custos e percebi que alguns componentes ou recursos não estão mais funcionando devido a não compatibilidade com o MySQL , como por exemplo a função : RecordCount
       
      Já consegui converter e atualizar 95% de aplicação para rodar com o MySQL, mas tem 1 item que esta tirando meu sono e após dias pesquisando, resolvi pedir ajuda.
       
      Segue o meu codigo abaixo , onde estou com problema no resultado dessa operação:
       
      <%
      ...
      Set RS = Server.CreateObject("ADODB.Recordset")
      RS.CursorLocation = 3
      RS.CursorType = 3
      RS.ActiveConnection = Cn
      RS.Open strSQL, Cn, 3, 3
      RS.PageSize = 25
      RS.CacheSize = RS.PageSize
      intPageCount = RS.PageCount
      intRecordCount = RS.RecordCount
          If NOT (RS.BOF AND RS.EOF) Then
      If CInt(intPage) > CInt(intPageCount) Then intPage = intPageCount
          If CInt(intPage) <= 0 Then intPage = 1
              If intRecordCount > 0 Then
                  RS.AbsolutePage = intPage
                  intStart = RS.AbsolutePosition
                  If CInt(intPage) = CInt(intPageCount) Then
                      intFinish = intRecordCount
                  Else
                      intFinish = intStart + (RS.PageSize - 1)
                  End if
              End If
          If intRecordCount > 0 Then
              For intRecord = 1 to RS.PageSize
          QntExibicoes = QntExibicoes + Rs.fields("views")
      ...
      %>
       
       
      Já percebi que a função RecordCount não pode ser usada com o MySQL ou pelo menos não é compativel.
       
      A paginação esta funcionando ! 
      Porem , não consigo fazer ele calcular a quantidade de linhas (rows) do MySQL com a função RecordCount e acredito que possa ter alguma outra função que não esta compativel , mas como não conheço MySQL , não posso afirmar.
       
      Enfim, algum pode me dar uma luz ?
       
      Desde já agradeço pela atenção.
       
      Obrigado.
    • Por EHCampos
      Tenho os seguintes valores em uma tabela MySQL

      Nome || pontos
      user1 || 20
      user2 || 22
      user3 || 0
      user4 || 40
      user5 || 10
      user6 || 2
      user7 || 5
       
      gostaria de quando pesquisar algum user ele mostrava a posição do mesmo e os 2 usuários acima e abaixo dele exemplo:
      Nome || pontos
      user2 || 22
      user1 || 20
      user5 || 10 <== Usuários pesquisado 
      user7 || 5
      user6 || 2
       
      Alguém tem alguma ideia?
    • Por marcosberaldo
      Pessoal, boa noite.
      Tenho uma tabela no BD que preciso criar um rankin.
      Fiz uma select que soma duas colunas, de pontuação e outra de desempate, depois ordena as somas por jogador e cria o ranking.
      Até ai está funcionando blz.
      Meu problema é o seguinte: Imagine que existam 100 jogadores, eu estou em 70º. Eu quero mostrar o rankin com a minha colocação, mas é inviável criar uma lista com mais de 70 jogadores. O que eu quero é mostrar 10 colocações antes de mim e 10 depois de mim, ou seja, mostrar do 60º ao 80º colocado, mas não consigo fazer isso.
      No meu código criei até um while que identifica minha colocação (70º), mas não consegui criar um while que exiba somente esses 20 jogadores. Se alguém souber como resolver... fico muito grato. Segue o código:
      $sql = "SELECT *, SUM(Pontos) as TotalPontos, sum(Acerto_Exato) as Acertos FROM placares INNER JOIN jogadores ON placares.JogadorID = jogadores.id WHERE rodada = '$rodada' GROUP BY JogadorID ORDER BY TotalPontos DESC, Acerto_Exato DESC"; // Inicia o While de pontuação $result = mysqli_query($conn, $sql); $result2 = mysqli_query($conn, $sql); $i = 1; // Define 1 para o primeiro lugar no ranking         // Esse while identifica minha posição no ranking         while($r = mysqli_fetch_assoc($result2)) {         $ID_Jog        =    $r['JogadorID'];         $Pos        =    $totalArray[$r['JogadorID']] = $i++;         if($LoginID == $ID_Jog) {          $Minha_Colocacao = $Pos;              }          }                   while($row = mysqli_fetch_assoc($result)) { $ID_Jogador        =    $row['JogadorID']; $Posicao        =    $totalArray[$row['JogadorID']] = $i++."º "; $RankJogador    =    $row['nome']; $Pontos            =    $row['TotalPontos']; $AcertoExato    =    $row['Acertos']; // Verifica se o usuário é o jogador logado e marca um style diferente para ele. if($LoginID == $ID_Jogador) {     // Se for o mesmo jogador define um fundo colorido para a linha dele na tabela     $destaque = "style=\"background-color:#e6a527\"";     //$Pos = explode('º',$Posicao);         } else {     // Caso não seja zera a variável novamente.     unset($destaque); } echo " <div class=\"divTableRow\" $destaque> <div class=\"divTableCell\" align=\"center\">$Posicao</div> <div class=\"divTableCell\" >$RankJogador</div> <div class=\"divTableCell\" align=\"center\">$Pontos</div> <div class=\"divTableCell\" align=\"center\">$AcertoExato</div> </div>"; }  
       
    • Por Leo.Lopes23
      Saudações,
       
       
      Tenho algumas dúvidas a respeito o ranqueamento de um site desenvolvido na plataforma Wix.
      É realmente possível desenvolver um SEO neste tipo de site ?
       
      Alguém poderia me ajudar ?
    • Por joaomart
      Olá. Preciso fazer uma consulta MySql em PHP para listar uma espécie de ranking, porém quando uso o código para listar por ordem decrescente ele lista da seguinte maneira:
      80
      70
      30
      100
       
      E preciso que ele liste assim:
      100
      80
      70
      30
       
      O código PHP:
      <?php include("conexao.php"); $sql = mysqli_query($conexao, "SELECT * FROM ranking ORDER BY `pontuacao` DESC") or die( mysqli_error($conexao) ); while($aux = mysqli_fetch_assoc($sql)) { echo "<tr>"; echo "<td>".$aux["nome"]."</td>"; echo "<td>".$aux["data"]."</td>"; echo "<td>".$aux["pontuacao"]."%</td>"; } ?> Agradeço a quem ajudar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.