Ir para conteúdo
Omar~

Muitas querys repetidas em paginação

Recommended Posts

Olá desenvolvi um sistema de paginação que funciona da seguinte forma.

Faço um query buscando todos resultados relativos a paginação.

Desses resultados obtenho os dados para executar uma segunda query onde passo o offset de acordo com a paginação.

 

A questão é, se por exemplo tenho resultados para exibir digamos 8 páginas, mas vai lá um "zé" e resolve passar na url do navegador mais do que o resultado esperado.

Prevendo isso resolvi fazer um redirect até que a query encontre resultados. Exemplo

A url ficaria assim:

http://site/paginar/registro-8 esse seria o limite de quantidade máxima de registros que existem

Se por então a pessoa tentar acessar assim: http://site/paginar/registro-99999999 o sistema de paginação começa a redirecionar decrementando os números até chegar ao resultado de 8.

Seguindo.... Isso não seria prejudicial ao servidor de alguma forma? Uma vez que isso, muitas querys vão ser geradas repetitivamente.

Por outro lado a velocidade de execução vai depender da velocidade de conexão e da máquina do usuário.

 

Na sua opinião. O que acha disso?

Redirecionar até o resultado existente ou simplesmente passar um erro de resultado não obtido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Considerando que o "zé" modificou a url, mandaria um erro e fim de papo. Ao meu ver, essa rotina que você criou só consumiria desnecessariamente recursos do servidor. A máquina e conexão do usuário interferem na velocidade, mas quem vai executar a tarefa é o servidor, salvo se a rotina seja lado cliente, tipo js. (My two cents)

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para 1~2~3......... Pessoas fazendo isso não tem problema.

Mas partir do ponto de vista do meu primeiro Chat-Box que desenvolvi onde a cada meio segundo era uma query nova, então imagina só o que aconteceu ao chat bater mais de 300 pessoas online, lembrando que elas também estavam conversando entre sí.....

 

Ao me recordar desse fato de uma época em que tinha pouca experiência resolvi foi mesmo é passar um 404 de todo tamanho, porque o cara fazer essa alteração na url, obviamente não tem lógica, a única intenção mesmo é má fé do usuário.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por kerven
      eae pessoal
      queria um javascript para associar a um botão.
      seria para usar em botoes de próximo e anterior, esse script tem que levar a uma pagina html q está na pasta do html atual
      as paginas são numeradas, por exemplo: 0.html, 1.html, 2.html, 3html...
       
      eu queria uma variável, que quando estivesse, por exemplo na numero 2.html, o botao "anterior" vá para a 1.html e o botao " próximo" vá para 3.html, 
       
      algo do tipo 
       
       Anterior= valor da pagina atual.html - valor da pagina atual -1.html e redirecionar para ela
      proximo= valor da pagina atual.html + valor da pagina atual + 1.html e redirecionar para ela
       
    • Por Maykel dos Santos Figueire
      Alguém por favor pode me ajudar, a paginação não funciona!
      <?php include 'configs/conecta.php'; $logado = $_SESSION['usuario']; $consultaSection = "SELECT * FROM motoristas WHERE id_logado = '$logado'"; $execSection = mysqli_query($conexao,$consultaSection) or die(error); ?> <div class="section">     <table>         <tr>             <td class="m">Matricula</td>             <td class="n">Nome</td>             <td class="c">CPF</td>             <td class="g">Ganhos</td>         </tr>         <?php             $pagina = (isset($_GET['pagina']))? $_GET['pagina'] : 1;              $banco = mysqli_query($conexao, "SELECT `id`, `nome`, `cpf`, `ganhos` FROM motoristas");             $total = mysqli_num_rows($banco);              $registros = 4;             $numPaginas = ceil($total/$registros);             $inicio = ($registros*$pagina)-$registros;              $banco = mysqli_query($conexao, "SELECT `id`, `nome`, `cpf`, `ganhos` FROM motoristas LIMIT $inicio,$registros");              $total = mysqli_num_rows($banco);             ?>          <?php while($exibe_pecas = mysqli_fetch_array($banco)) {?>             <?php while($logado = mysqli_fetch_array($execSection)) { ?>                          <tr>                 <td class="m"><?php echo $logado["id"];?></td>                 <td class="n"><?php echo $logado["nome"];?></td>                 <td class="c"><?php echo $logado['cpf'];?></td>                 <td class="g"><?php echo round($logado['ganhos'], 2);?></td>             </tr>             <?php } ?>         <?php } ?>         <?php             if($pagina > 1) {                 echo "<a href='painel.php?pagina=".($pagina - 1)."' class='controle'>&laquo; anterior</a>";             }             for($i = 1; $i < $numPaginas; $i++) {                 $ativo = ($i == $pagina) ? 'numativo' : '';                 echo "<a href='painel.php?pagina=".$i."' class='numero ".$ativo."'> ".$i." </a>";             }             if($pagina < $numPaginas) {                 echo "<a href='painel.php?pagina=".($pagina + 1)."' class='controle'>proximo &raquo;</a>";                     }         ?>     </table> </div> Grato!
    • Por son goku
      Boa tarde pessoal.
      Estou com o seguinte problema:
      ao clicar no numero da paginação,ela não exibe os dados,vou postar o código abaixo para voçês,verem.
      Quem poder me ajudar:
      <?php session_start(); if (!isset($_SESSION["id"]) || !isset($_SESSION["nome"])){     echo "Você não fez o login no sistema."; } ?> <html> <head> <title>Tipo de consulta</title> </head> <body> <table border="1"> <tr> <td>Descrição:</td>  <td>Forma de pagamento:</td> <td>Valor da parcela: </td> <td>Quantidade de parcelas:</td> <td>Numero da parcela:</td> <td>Pago:</td> <td>Cartão:</td> <td>Numero do cart&atildeo:</td> <td>Data de vencimento:</td> </tr> <?php include "conecta_banco.php"; $idusu = $_SESSION["id"]; $consulta =  isset( $_POST["tipo_consulta"] ) ? $_POST["tipo_consulta"] : null; switch ($consulta){          case "exibe_tudo":               $pagina = (isset($_GET['pagina']))? $_GET['pagina'] : 1;                  //seleciona todos os itens da tabela         $sent_sql = "SELECT * FROM gastos";         $result = mysql_query($sent_sql);                  //conta o total de itens         $total = mysql_num_rows($result);                  //seta a quantidade de itens por página, neste caso, 2 itens         $registros = 20;                  //calcula o número de páginas arredondando o resultado para cima         $numPaginas = ceil($total/$registros);                  //variavel para calcular o início da visualização com base na página atual         $inicio = ($registros*$pagina)-$registros;                  //seleciona os itens por página         $sent_sql = "SELECT * FROM gastos LIMIT $inicio,$registros";         $result = mysql_query($sent_sql);         $total = mysql_num_rows($result);                                     while($tbl = mysql_fetch_array($result))         {                         $descricao = $tbl["descricao_gasto"];             $formapagamento = $tbl["moeda"];             $valor = $tbl["valor_gasto"];             $quantidade = $tbl["quant_parcela"];             $numerodaparcela = $tbl["num_parcela"];             $tapago = $tbl["pago"];             $cartao = $tbl["cartao"];             $numcartao= $tbl["num_cartao"];             $datavencimento = $tbl["data_venc"];                                                                                                /* Aqui converto a data que vem do mysql no formato y/m/d              * para d/m/y */                          $datavencimentoconv = date("d/m/Y",strtotime($datavencimento));                                         echo "<tr>";             echo "<td>$descricao </td>";             echo "<td>$formapagamento </td>";             echo "<td>R$ $valor </td>";             echo "<td>$quantidade </td>";             echo "<td>$numerodaparcela</td>";             echo "<td>$tapago</td>";             echo "<td>$cartao </td>";             echo "<td>$numcartao </td>";             echo "<td>$datavencimentoconv </td>";             echo "</tr>";                      }                                    $sent_sql2 = "SELECT sum(valor_gasto) FROM gastos WHERE usu_id='$idusu'";         $result2 = mysql_query($sent_sql2);                  while($sum = mysql_fetch_array($result2)){             $soma = $sum['sum(valor_gasto)'];                          echo "<tr>";             echo "<td>Total: </td>";             echo "<td>R$ $soma</td>";             echo "</tr>";                        }                  //exibe a paginação         for($i = 1; $i < $numPaginas + 1; $i++) {             echo "<a href='tipoconsulta.php?pagina=$i'>".$i."</a> ";         }                 break; }   ?> </table> </body> </html> Acredito que seja algo,simpless porém já estou a um bom tempo quebrando a cabeça com isso.
    • Por Gustavo2503
      Olá!
      Eu preciso fazer uma tabela que contém muitos registros, para organizá-lo melhor eu necessitarei de uma paginação que não faça refresh na página, que não precise de um envio do método GET, que o usuário tivesse a opção de escolher quantos registros por página ele verá, e que só aparecesse no máximo 5 botões, por exemplo:
      < 1 2 3 4 5 >
      Ai o usuário foi pra página 8.
      < 6 7 8 9 10 >
      E detalhe, sem usar o DataTables. Agradeço.
    • Por Cesar Masserati Procopio
      Pessoal, boa Tarde!
      Pode me Ajudar com um probleminha que estou tendo hehehe...
      Fiz essa paginação via AJAX completa está tudo funcionando blz, porém quando tiver muitos registros está desconfigurando. 
      Gostaria de fazer, conforme pode ver nas imagens abaixo, a Imagem Original ficar igual a Imagem Modificada!
      Alguma Dica ou sugestão?


      function filtroProc(){ $('.pagination').html(''); var filtro = $('input[name=filtro]:checked').val(); filtros.setFiltro(filtro); var offset = getPaginacao.getOffsetAtual(); var maximo = getPaginacao.getMaximo(); var links = getPaginacao.getLink(); $.ajax({ url:'nav/conf/con_lis_pro_ajax.php', type:'POST', dataType:'json', data:{offset:offset, maximo:maximo, filtro:filtro}, success:function(json){ filtros.setTotalFiltro(json.totalFil); getPaginacao.setTotal(json.totalItem); var totalFiltros = filtros.getTotalFiltro(); var totalItens = getPaginacao.getTotal(); $('.tabela tbody').empty(); $(".contagem").html(totalFiltros); $(".total").html(totalItens); var verif = 0; if(verif === json){ var html = '<tr>'; html += '<td colspan=5><div class="msg_no">Não existe cadastro de Processos de Emissão!</div></td>'; html += '</tr>'; $('.tabela tbody').append(html); }else{ for(var i in json.lista){ var html = '<tr>'; html += '<td align="center">'+json.lista[i].id+'</td>'; if(json.lista[i].status === 'a'){ html += '<td align="center"><img src="../image/semaforo/verde.png" data-id="'+json.lista[i].id+'" data-name="i" onclick="atualizaStatus(this)"/></td>'; }else{ html += '<td align="center"><img src="../image/semaforo/vermelho.png" data-id="'+json.lista[i].id+'" data-name="a" onclick="atualizaStatus(this)" /></td>'; } html += '<td align="center">'+json.lista[i].identificador+'</td>'; html += '<td>'+json.lista[i].descricao+'</td>'; html += '<td><a class="lista_bt2" href="#" data-id="'+json.lista[i].id+'" onclick="editarPro(this)"></a></td>'; html += '</tr>'; $('.tabela tbody').append(html); } } // ---- PAGINAÇÃO ------ // var maximo = getPaginacao.getMaximo(); var totalPaginas = Math.ceil((totalFiltros / maximo)); htmlPag = '<a href=\"#" data-id="1" onclick="dispara(this);">Primeira Página</a>&nbsp;&nbsp;&nbsp;'; for (var i = 1; i <= totalPaginas; i++){ htmlPag += '<a href="#" data-id="'+i+'" onclick="dispara(this)" class="">'+i+'</a>&nbsp;&nbsp;&nbsp;'; } htmlPag += '<a href=\"#" data-id="'+totalPaginas+'" onclick="dispara(this);">Ultima Página</a>&nbsp;&nbsp;&nbsp;'; $('.pagination').append(htmlPag); $('.pagination').find('.active_pag').removeClass('active_pag'); $('.pagination').find('a[data-id='+getPaginacao.getPagAtual()+']').addClass('active_pag'); } }); }  
×

Informação importante

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