Ir para conteúdo

Arquivado

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

Retur

While para trazer resultado

Recommended Posts

Estou usando três WHILE para trazer um resultado de duas tabelas do banco de dados,uma tabela possui em torno de 1000 registro,outra tabela possui em torno de 1000000 de registros,só que estou notando que a maneira que estou fazendo,não está funcionando,pois está causando um lag no sistema.

São três While com select das mesmas tabelas,porém com condições diferentes,o que eu queria saber é se tem algo que eu possa estar fazendo para tentar melhor esse script.

$query = $conn->prepare("SELECT * FROM tabela1,tabela2 WHERE tabela1.var = '0' AND tabela1.var0 = '1' AND tabela1.var2 = '' AND tabela1.var3 = tabela2.var1 ORDER BY tabela2.var1");$query->execute();while ($result = $query->fetch(PDO::FETCH_ASSOC)){} $query = $conn->prepare("SELECT * FROM tabela1,tabela2 WHERE tabela1.var = '1' AND tabela1.var0 = '1' AND tabela1.var2 = '' AND tabela1.var3 = tabela2.var1 ORDER BY tabela2.var1");$query->execute();while ($result = $query->fetch(PDO::FETCH_ASSOC)){} $query = $conn->prepare("SELECT * FROM tabela1,tabela2 WHERE tabela1.var = '2' AND tabela1.var0 = '1' AND tabela1.var2 = '' AND tabela1.var3 = tabela2.var1 ORDER BY tabela2.var1");$query->execute();while ($result = $query->fetch(PDO::FETCH_ASSOC)){}

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu te recomendaria a fazer é criar tabs e utilizar ajax para fazer cada requisição já que a consulta é grande, e, ainda considerando que o resultado seria grande, paginar também com ajax, o que é bem fácil de fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então,o que acontece é o seguinte,que eu não expliquei,é que esses resultados são de diversos usuários,o máximo que cada usuário iria carregar seria 100 resultados,ou até menos,pouquíssimos usuários iriam trazer mais do que 100 resultados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo assim, aí entra o UX, você gostaria de ver uma carga de 100 resultados de uma só vez ? E nos dispositivos mobile como isso ficaria ? Eu, particularmente, fecharia. Entao sim, pagine os resultados, se tiver mais de 20, que eu já acho muito, já deve ser paginado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não são resultados que prejudicaria o desempenho da página em relação a celular ou qualquer outra coisa,é a mesma coisa de serem listados de 50 a 100 nomes,e nesse meu caso a paginação não seria legal.

É como eu disse,o que me parece ser o problema é tamanho da tabela que contém mais de 1 milhão de dados com a maneira que eu estou trazendo esses resultados,pelo menos o que eu acho.

Por exemplo,se 100 usuários acessarem essa página,vai gerar uma requisição enorme,entende o que estou dizendo,ai acaba pesando um pouco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro tem que ver se esse seu BD está normalizado, se ele foi modelado da forma correta e etc, isso é um ponto crucial quando se fala em desempenho.

Segundo, você está fazendo 3 consultas as mesmas tabelas, não há possibilidade de unir essas consultas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então,a principio estou tentando retirar os 5 while na página e colocar apenas um para ver se consigo resolver o problema.

Em relação ao "seu BD está normalizado",o que você quis dizer com isso?

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estive pensando em tentar fazer alguns testes tentando retirar as condições do SELECT,por exemplo fazer a busca de todos os registros sem condição,e depois eu coloco a condição,fazer o SELECT mais limpo no banco de dados,evitando que ele "perca" tempo na busca.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por iguulima
      Bom dia a todos, tenho em meu banco de dados uma tabela de pedidos, onde nesse pedidos estão salvos as id's dos produtos que foram selecionados pelo usuário, gostaria de saber se tem alguma forma utilizando um while que possa selecionar os produtos mais pedidos dessa tabela, não tenho ideia por onde começar. Consigo listar todos apenas mas não sei como selecionar os que são mais pedidos.
    • Por iguulima
      Ola a todos,
      Estou com uma dúvida e ja tentei de tudo que estão dentro das minhas limitações de conhecimento. Tenho um laço de repetição While sendo executado e quero que uma Variavel seja executada apenas uma vez dentro desse laço. Existe essa possibilidade. Obrigado a todos. Segue o código:

       
      <?php $consult = $row['id']; $sql = "SELECT * FROM upload_data WHERE USER_CODE = '$consult' ORDER BY id ASC"; $resultadoimg = mysql_query($sql); $numero_registros = mysql_num_rows($resultadoimg); while($registrosimg = mysql_fetch_array($resultadoimg)) { ?> <li data-target="#carousel-custom" data-slide-to="0" <?php ele precisa ser executado uma unica vez aqui?>><img src="" alt=""></li> <?php } ?>  
    • Por mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
    • Por eduardodsilvaq
      Não sei oq tem de errado.
       
      O erro:
      Notice: Undefined index: name in C:\AppServ\www\includes\functions.php on line 105 A linha do erro:
      <td width="106"><div class="fonte">'. $row["name"] .'</div></td> O codigo:
      function mini_ranking (){ $PDO = db_connect_gamedata(); $sql = "SELECT name baselevel FROM u_hero WHERE class <> '80' ORDER BY baselevel Desc Limit 6"; $result = $PDO->query($sql); $guild = $result->fetchAll(PDO::FETCH_ASSOC); $i = 1; echo '<table width="153" height="0" border="0">'; foreach($guild as $row) { echo '<tr> <td width="0" height="0" align="center"><div class="fonte">'. $i++ . '</div></td> <td width="106"><div class="fonte">'. $row["name"] .'</div></td> <td width="20"><div class="fonte">'. $row["baselevel"] .'</div></td> <tr>'; } echo '</table>'; }  
    • Por danilo759
      Estou precisando saber o percentual de imagens que está no diretório e estou com dificuldades. Alguém pode me ajudar dar uma luz?

       
      $qry_canal = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal IN('HBO','GLO','TNT') GROUP BY dados.titulo"); $counter = 0; while($rows = $qry_canal->fetch(PDO::FETCH_ASSOC)){ $id = $rows['id']; $sigla = $rows['canal']; $sk = substr($rows['sk'], 0, 14); // Busca total de programas por canal /* ---------------------------------------------------------------- */ $qry_b = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal LIKE '".$sigla."' GROUP BY dados.titulo"); $total_programas = $qry_b->rowCount(); if(empty($serieskey)) { $prog_id = "$id"; } else{ $prog_id = "$sk"; } // VERIFICA SE EXISTE IMAGEM /* ---------------------------------------------------------------- */ if(file_exists("/imagens/".$prog_id."_epg.jpg")){ $arr_img[] = "".$counter++.""; } $total_fotos = "".count($arr_img).""; echo "".($total_fotos * 100 ) / $total_programas."% <br />"; }  
×

Informação importante

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