Oi Sérgio,
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.
Na verdade até dá e simplificaria a coisa toda, mas fica meio gambiarra.
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 plicar o conceito MVC.