Ir para conteúdo

POWERED BY:

Arquivado

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

Sérgio Toledo

[Resolvido] Como otimizar consulta a BD?

Recommended Posts

Bom dia à todos.

 

Estou fazendo uma consulta ao meu BD MySQL onde preciso exibir o resultado em dois containers diferentes, só que para isso estou fazendo duas consultas distintas e gostaria de saber se há uma maneira de fazer a mesma coisa com apenas uma consulta. Na verdade é uma dúvida de lógica mesmo.

 

Segue exemplo de como está no momento:

 

    <div class="produtoTexto">
     <?php
        $cmd = "SELECT titulo FROM produtos;";
        $produtos = mysql_query($cmd);
        while($produto = mysql_fetch_assoc($produtos)){
          echo "<h3>".$produto['titulo']."</h3><br/>";
        }       
     ?>  
    </div>
    <div class="produtoImagem">
     <?php
        $cmd = "SELECT foto FROM produtos;";
        $produtos = mysql_query($cmd);
        while($produto = mysql_fetch_assoc($produtos)){
         echo "<img src='admin/others/uploads/fotos/".$produto['foto']."' alt='' />";
        }       
     ?>       
    </div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça a consulta e jogue o resultado em um array ai você itera o array 2x e coloque os 2 campos nessa consulta nova.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for possível, faça uma única consulta no banco utilizando o relacionamento entre as tabelas, se houver... claro. Já tive problemas com mesmas variáveis para consultas distintas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mode POG on.

 

<?php
  $fotos = "";
  $titulos = "";
  $cmd = "SELECT titulo , foto FROM produtos;";
  $produtos = mysql_query($cmd);
  while($produto = mysql_fetch_assoc($produtos)){
       $titulos .= "<h3>".$produto['titulo']."</h3><br/>";
       $fotos .= "<img src='admin/others/uploads/fotos/".$produto['foto']."' alt='' />";
  }
?>
    <div class="produtoTexto">
        <?php  echo $titulos ?>
    </div>
    <div class="produtoImagem">
        <?php echo $fotos ?>       
    </div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for possível, faça uma única consulta no banco utilizando o relacionamento entre as tabelas, se houver... claro. Já tive problemas com mesmas variáveis para consultas distintas.

é 2 consultas na mesma tabela.....rrs so muda o campo de uma pra outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado à todos.

 

Prog, utilizei o seu método e funcionou.

Foi uma boa idéia fazer tudo virar uma string e depois apenas exibir.

 

ebotega, vou ver se faço isso também, por que tenho outras consultas na mesma página para áreas diferentes em diferentes tabelas.

 

Brande abraço e fiquem na Luz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Sérgio,

 

Este post estava "replicado" em outro fórum e eu acabei respondendo por lá.

Então repliquei a resposta aqui, apesar de você já ter resolvido o problema.

 

A solução que o Prog enviou foi realmente a mais simples e bastante inteligente.

Para um sistema pequeno e simples, fique com a solução do Prog.

 

Eu elaborei uma uma solução ligeiramente mais profunda. Pode ser útil

no caso de você se deparar com um sistema um pouco maior(ou mais complexo)

do que o habitual.

 

Segue a solução...

 

 

 

Dá sim para fazer em um consulta só,

porém não dará para fugir do laço de repetição na hora de exibir.

Quero dizer que os dois "whiles" dentro dá div terão que existir.

 

Eu fui um pouco mais além e tentei separar as obrigações do seu código,

a parte que faz a consulta ao DB (na qual chamamos de model) está logo no início do script e

a parte que e exibi(na qual chamamos de view) contém apenas os elementos necessários para gerar o html. Compliquei?

 

Para piorar um pouco, eu utilizei o mínimo de orientação a objeto

criando uma classe genérica com a função "stdClass".

 

Fiz isso pela simples razão de gosto, eu prefiro olhar para isto...

echo $produto->titulo;

do que para isto...

echo $produto['titulo'];

 

 

 

Segue o código reescrito...

 

<?php

// trecho referente ao Model
$sql    = "SELECT titulo, foto FROM produtos;";
$result = mysql_query($sql);

$array_produtos = array();
while($row = mysql_fetch_assoc($result){
  $produto          = new stdClass(); // cria uma classe genérica
  $produto->titulo  = $produto['titulo'];
  $produto->foto    = $produto['foto'];
  $array_produtos[] = $produto;// vai montando o array com os objetos produtos
}    
?>


<?php // trecho referente a View ?>
<div class="produtoTexto">
 <?php
 foreach($array_produtos as $produto)
     echo "<h3>".$produto->titulo."</h3><br/>";
 ?>
</div>
<div class="produtoImagem">
 <?php
 foreach($array_produtos as $produto)
     echo "<img src='admin/others/uploads/fotos/".$produto->foto."' alt='' />";
 ?>
</div>

 

 

Eu reescrevi o código e não testei, isso significa que

se você rodá-lo aí pode ser que dê algum pau.

Se isso acontecer, me replica falando qual foi o erro

que eu tento concertar.

 

Espero ter ajudado.

Se eu viagei na maionese, me desculpe.

 

 

Obs: Experimente separar seu código por obrigações, siga o modelo MVC.

Vale lembrar que não é preciso utilizar um framework para aplicar o conceito MVC.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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