Jump to content
EvertonFD

[Resolvido] Ajuda com order by para ranking

Recommended Posts

Bom dia estou fazendo u  ranking onde deve ser selecionado alguns critérios de desempate exemplo:

Caso os pontos sejam iguais deve ser decidido pelos gols, só pra ressaltar estou aprendendo php então se tiver uma maneira melhor de fazer isso estou disposto a aprender, segue o codigo que estou usando:

 <?php
        $result_times = "  SELECT * FROM  times    WHERE grupos='4'  
                                                
                                                ORDER BY pontos    DESC";
        $resultado_times = mysqli_query( $conn, $result_times );
        while ( $row_times = mysqli_fetch_assoc( $resultado_times ) ) {
            ?>

    

    <div class="row p-1 bg-light p-1 mt-1 ">
        <div class="col-md-3 ">
            <img src="assets/images/times/<?php echo $row_times['id']; ?>/<?php echo $row_times['logo_time']; ?>" width="60">
            <span>
                <?php echo $row_times['nome']; ?>
            </span>
        </div>
        <div class="col-md-1 col-4 align-self-center  border">
            V- <?php echo $row_times['vitoria']; ?>
        </div>
        <div class="col-md-1 col-4 align-self-center border">E-<?php echo $row_times['empate']; ?></div>
        <div class="col-md-2 col-4 align-self-center border">D-<?php echo $row_times['derrota']; ?></div>
        <div class="col-md-2 col-4 align-self-center border">GF-<?php echo $row_times['gf']; ?></div>
        <div class="col-md-2 col-4 align-self-center border">GC-<?php echo $row_times['gc']; ?></div>
        <div class="col-md-1 col-4 align-self-center border">P-<?php echo $row_times['pontos']; ?></div>

    </div>
            <!---->
            <?php
        }
        ?>
      
    

Share this post


Link to post
Share on other sites

 

Salve a última pontuação e verifique se ela não é igual à pontuação atual antes de aumentar.

 

 <?php
$result_times = "SELECT * FROM times WHERE grupos='4' ORDER BY pontos DESC";
        $resultado_times = mysqli_query($conn, $result_times );
$i=0;
$lastscore = NULL;
        while ($row_times = mysqli_fetch_assoc($resultado_times ) ) {
  
 if ($lastscore != $row_times['pontos']){
   $i++;
   }
   echo "Classificação ".$i."do".$row_times['grupos']." com pontos ".$row_times['pontos'];
   $lastscore = $row_times['pontos'];
}            

?>

 

Ou pode fazer também  assim

 

 <?php
$result_times = "SELECT * FROM times WHERE grupos='4' ORDER BY pontos DESC";
        $resultado_times = mysqli_query($conn, $result_times );
if( !$resultado_times){
  echo 'Falha na consulta no SQL';
}else{

  $rank = 0;
  $last_score = false;
  $rows = 0;
        while ($row_times = mysqli_fetch_assoc($resultado_times ) ) {
    $rows++;
    if( $last_score!= $row['pontos'] ){
      $last_score = $row['pontos'];
      $rank = $rows;
    }
    echo "Classificação ".$rank."do".$row['grupos']." com pontos ".$row['pontos'].";
  }
}           

?>

Obs: em .$rank."do".$row['grupos']." coloquei grupos pois não sei se esta chamando por grupo ou por nome do tal

Só espero que consegue entender o que eu quis dizer ai em cima...

 

Esse código também ajustará as classificações corretamente - como:

rank 1 is Adam Aarons with point 100
rank 2 is Barry Blue with point 90
rank 2 is Betty Boop with point 90
rank 4 is Charlie Chaplin with point 80

Observe que não há "rank 3", pois "Charlie Chaplin" é na verdade o quarto maior artilheiro.

Se você não deseja esse comportamento, basta substituir $rank = $rows; por $rank++;

 

Obs: Isso é apenas um exemplo de como seria você pode configurar da sua melhor maneira, só foi um ex: de como seria...

 

Se ainda estiver com duvida de como fazer pode dar uma olhada aqui no FÓRUM... que tem uns exemplos também...

Share this post


Link to post
Share on other sites

 supondo que a soma seja o total de gols.

ORDER BY pontos DESC,(gc+gf) desc

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mamotinho
      Olá pessoal , estou tendo um trabalho em defini a porta na qual eu quero que meu site se conecte. eu alterei a porta utilizada na minha máquina para eu utilizar somente ela no meu site porém quando eu acrescendo o campo da PORT da o seguinte erro.
      Connection Error: SQLSTATE[08001] SQLDriverConnect: 17 [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server inexistente ou acesso negado.  
      O Código de conexão na qual estou utilizando é esse.
       
      class Database { protected static $db; protected $db_host = DB_HOST; protected $db_usuario = DB_USER; protected $db_senha = DB_PASS; private function __construct() { try { self::$db = new PDO("odbc:Driver={SQL Server};Server=".$this->db_host.";port=8657; Uid=$this->db_usuario;Pwd=$this->db_senha; PDO::ATTR_PERSISTENT => true"); self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Connection Error: " . $e->getMessage()); } } public static function conexao() { if (!self::$db) { new Database(); } return self::$db; } } se alguém pude me ajuda ficarei bastante grato.
    • By Bassoli
      Olá, preciso de ajuda para meu sistema, preciso pegar o e-mail do usuário logado na conta, mais fiz um sistema que ele mostra todos email da mysql cadastrados, podem me ajudar?
       
      Meu sistema: 
      http://prntscr.com/qsm0tn (Puxar database)
      http://prntscr.com/qsm08u (Mostrar na label) 
      http://prntscr.com/qsm0n2 (Monstrando os emails no sistema)
    • By Good
      Boa noite,
      gostaria de saber como vocês fariam um sistema de delivery.
       
      Pensei em 3 soluções:
      1. Cadastrar as faixas de CEP que haverá sistema de entregas;
      2. Criar uma área delimitadora no google e exportar em KML para fazer a validação se o endereço do cliente está dentro do raio;
      3. Criar um raio de entregacom ponto fixo do estabelecimento, por exemplo, o estabelecimento só vai poder atender em um raio de até 10km.
       
      Qual método o ifood e outros gigantes trabalham? Existe algum código pronto para que eu possa dar uma olhada?
       
      Aguardo um contato, obrigado!
    • By marcossantana10
      Eu to fazendo uma aplicação que precisa trabalhar com valores e não to encontrando a solução ideal:
       
      preciso que o preço de um produto seja armazenado, precisamente, informando milhares, centenas, dezenas, todas as informações. exemplo:

      R$ 1.500,50 (mil e quinhentos reais e cinquenta centavos)
      eu já usei uma função (str_replace) pra substituir a virgula por pontos, porém o que vem depois da vírgula não está sendo considerado
      está salvando 1.500 apenas. Já tentei todo tipo de campo no banco (float, double, decimal, int).
       
      Como eu poderia solucionar isso?
    • By Lenon John
      Estou começando no PHP e preciso criar um simples sistema para emitir boletos na web com o SICOOB.
      OBS: Que quero me conectar a API SICOOB e não sei por onde começar.
       
      O SICOOB disponibiliza na página de developers.sicoob.com.br essas informações:
      GET https://sandbox.sicoob.com.br/oauth2/authorize?response_type=code&redirect_uri=[[callback_url]]&client_id=[[client_id]]&cooperativa=[[cooperativa]]&contaCorrente=[[conta]]&versaoHash=3&scope=[[escopos]]
      PARÂMETRO: response_type = Tipo de resposta gerada pelo fluxo authorize
      PARÂMETRO :redirect_uri = Endereço que será redirecionado após a autorização
      PARÂMETRO: client_id = Chave de acesso às APIs
       
      RESPOSTA:
      [[callback_url]/code=2eb7fd2c-aaf9-3655-bcf5-71972b50eb3d&state=0.3549351162541514

       
      Obtendo Access Token:
      POST https://sandbox.sicoob.com.br/token Headers Content-type: "www/form-url-encoded" Authorization: Basic [[token_basic]] Payload grant_type=authorization_code&code=2eb7fd2c-aaf9-3655-bcf5-71972b50eb3d&redirect_uri=[[callback_url]] E mais umas informações complementares aqui. Se alguém puder me ajudar, passo mais informações.
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.