Ir para conteúdo

POWERED BY:

Arquivado

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

bestao

Consulta com vários echo sem repetir resultado - php e sql

Recommended Posts

Olá,

 

Minha dúvida é: como fazer uma consulta php-sql com vários echo e sem repetir resultados? ambos possuem id único.

Irei mostra o código(que estar funcionando) para assim entenderem melhor.

<?php
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
<section id=\"destinations-wrapper\" class=\"container\">	<div class=\"destinations-inner\">    	<div class=\"row-fluid\">        	<div class=\"span5\">                <div class=\"desti-head\">                    <div class=\"heading\">                            <div class=\"head-circle\">                                <div class=\"head-circle-inner\"></div>                            </div>                        DESTINOS ESPECIAIS                        <div class=\"head-bottom-bar\"></div>                    </div><!--heading-->                </div>            </div>                        <div class=\"span7\">                <div class=\"caption\">                    <p>Os melhores preços para passagens aéreas, hotéis, pacotes de viagens e muito mais.</p>                </div>            </div>         </div>                          	            	


<div class=\"clearfix\"></div>
         <div class=\"destination-wrapper\">
         <div class=\"clearfix\"></div>
         	<div class=\"row-fluid\">
            	<div class=\"span5\">
                
                    <div class=\"destination-carosel\">
                        <div id=\"destination-showcase\">
                        
                        	<ul class=\"rs-slider\">
                        
                                <li>
                                    <div class=\"slide-holder\">
                                        <img src=\"". $row['image'] ."\" alt=\"\"/>
                                        
                                        <div class=\"caption\">
                                        	<p>". $row['title'] ."</p>
                                        </div>
                                        <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                    </div>
                                 </li>
";
}
mysql_close($con);
?>
<?php
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
                                 <li>
                                    <div class=\"slide-holder\">
                                        <img src=\"". $row['image'] ."\" alt=\"\"/>
                                        <div class=\"caption\">
                                        	<p>". $row['title'] ."</p>
                                        </div>
                                        <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                    </div>
                                 </li>
";
}
mysql_close($con);
?>
<?php
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
                                 <li>
                                    <div class=\"slide-holder\">
                                        <img src=\"". $row['image'] ."\" alt=\"\"/>
                                        <div class=\"caption\">
                                        	<p>". $row['title'] ."</p>
                                        </div>
                                        <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                    </div>
                                 </li>
";
}
mysql_close($con);
?>
<?php
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
                                 <li>
                                    <div class=\"slide-holder\">
                                        <img src=\"". $row['image'] ."\" alt=\"\"/>
                                        <div class=\"caption\">
                                        	<p>". $row['title'] ."</p>
                                        </div>
                                        <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                    </div>
                                 </li>
                                 <li>
";
}
mysql_close($con);
?>
<?php
include "../connect-bd.php";
$result = mysql_query("SELECT * DISTINCT title FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
                                    <div class=\"slide-holder\">
                                        <img src=\"". $row['image'] ."\" alt=\"\"/>
                                        <div class=\"caption\">
                                        	<p>". $row['title'] ."</p>
                                        </div>
                                        <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                    </div>
                                 </li>
                              </ul>
";} 
mysql_close($con);
?>
<?php  
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo " 
                         </div><!--destination-showcase-->
                        
                         <div id=\"destination-thumbs\"></div><!--destination-thumbs-->
                         
                         <div class=\"view-detail\">
                             <div>Ver mais <span class=\"icon-double-angle-right\"></span></div>
                             <a href=\"destinos.php\">Destinos</a>
                         </div>
                        
                     </div><!--destination-carosel-->
                    
                 <div class=\"clearfix\"></div>
                </div><!--span-->
                
                <div class=\"span7\">
                
                	
                    <div class=\"box1 box-inner\">
                            <img src=\"". $row['image'] ."\" alt=\"\" />
                            <div class=\"box-icon\"><span class=\"icon-play\"></span></div>
                            <div class=\"box-hover\">
                                <div class=\"box-caption\">
                                    <div class=\"tag-line\">". $row['title'] ."</div>
                                    <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                </div>
                                <a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
                            </div>
                        </div>
";
}
mysql_close($con);
?>
<?php  
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "                                        
  <div class=\"box2 box-inner\">
                            <img src=\"". $row['image'] ."\" alt=\"\" />
                             <div class=\"box-hover\">
                                <div class=\"box-caption\">
                                    <div class=\"tag-line\">". $row['title'] ."</div>
                                    <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                </div>
                                <a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
                            </div>
                        </div>                       
";
}
mysql_close($con);
?>
<?php  
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "                          
 <div class=\"box3 box-inner\">
                            <img src=\"". $row['image'] ."\" alt=\"\" />
                             <div class=\"box-hover\">
                                <div class=\"box-caption\">
                                    <div class=\"tag-line\">". $row['title'] ."</div>
                                    <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                </div>
                                <a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
                            </div>
                        </div>
                        ";
}
mysql_close($con);
?>
<?php  
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "   
 <div class=\"box4 box-inner\">
                            <img src=\"". $row['image'] ."\" alt=\"\" />
                             <div class=\"box-hover\">
                                <div class=\"box-caption\">
                                    <div class=\"tag-line\">". $row['title'] ."</div>
                                    <div class=\"city\">". $row['país_ou_estado'] ."</div>
                                </div>
                                <a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
                            </div>
                        </div>
                     </div>
                <div class=\"clearfix\"></div>
                </div><!--span-->
                
            </div><!--row-->
      
    </div>
</section>
";
} 
mysql_close($con);
?>

Desse jeito funciona mais ou menos, porque eu utilizei ORDER BY RAND() para trazer resultados aleatórios (as vezes repete). Queria fazer uma só consulta já que estou pesquisando a mesma coisa em cada box html.

obs: uma vez eu fiz um código com uma consulta só, e coloquei ECHO onde inicia cada box html e deu "certo" veio resultados iguais, só faltou vim resultados diferentes e únicos. no caso eu teria que identificar cada ECHO? não sei qual a melhor solução, mas como posso fazer esse código simples funcionar?

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim sem repetir resultados? Se você esta dentro de um Laço de Repetição, irá repetir sim. Especifique melhor sua dúvida/problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto, no caso esse Laço de repetição não serve para essa aplicação. Oque eu posso fazer para que tipo: não repita os dados do banco na consulta?

​olhe lá no site: voosehoteis.com.br - na área ( DESTINOS ESPECIAIS ), Ali estou fazendo um SELECT para pegar os Dados que contém (pagina = 'destinos') e jogo lá numa forma de "sorteio" ORDER BY RAND(). Mas para cada BOX HTML onde aparece imagens e outras informações estou fazendo um SELECT, e estão se repetindo, coisa que não pode acontecer. Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu caro,

 

Pelo que vi, vc está fazendo vários select's de uma mesma tabela e por mais que vc coloque RAND() poderá aparecer resultados repetidos.

 

Então faça apenas uma query para cada página (junte em uma função só - se possível) faça uma query, verifique se não tem registros repetidos gravados em seu banco de dados.

 

Espero ter ajudado :D

 

Qualquer coisa dê um grito

Compartilhar este post


Link para o post
Compartilhar em outros sites

Justamente!

Mas eu não tô sabendo fazer isso. Só preciso de um exemplo do que preciso fazer.

Sei que preciso juntar as consultas em uma função só.

 

:upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá meu caro!

 

Não sei como estão estruturadas suas páginas ou os itens de seu site (em uma única página). Mas enfim, vou considerar que vc quer mostrar vários itens aleatórios em seu site. Ok vamos lá

 

faz a seguinte query, entretanto, apenas uma vez e o resultset -linhas de resultado de consulta ao banco de dados, nos itens que você queira mostrar, ex:

 

$result = "SELECT * FROM travel where pagina in('destino', 'viagem') ORDER BY RAND() "; /* nesse caso retirei o limit (já que essa query vai gerar muitas linhas) e modifiquei o parâmetro where (coloquei "in", que suporta vários parâmetros)*/

 

$exec = mysql_query($result); // executa a query

 

$dados = array();

for($i=0;$i<mysql_num_rows($exec);$i++;){

$linha = mysql_fetch_array($exec);

// agora verificar as ocorrencias e coloca-las em um array

$dados['pagina'][$i] = $linha['pagina'] /*bem, e assim vai outros parâmetros - nesse caso criei um array que conterá vários dados*/

}

 

// agora na página que mostra - colocarei apenas a lógica da coisa, a parte de apresentação deixarei a seu critério.

 

<?php

if($dados['pagina'] == 'destino'){

echo $dados['pagina'][0]."<br>";

echo "demais dados que vc gravou no array";

}

 

if($dados['pagina'] == 'vagem'){

echo $dados['pagina'][0]."<br>";

echo "demais dados que vc gravou no array";

}

 

?>

 

bem, basicamente eu fiz um array que coleta os resultados (sem formatação alguma), e na apresentação eu filtro de acordo com o que é pedido.

 

Qualquer dúvida dê um grito :D espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou! oque eu estou precisando é uma coisa mais simples que isso.

Eu só quero transformar essas 2 consulta abaixo(no meu site são umas 10) em uma só. Exemplo: cada uma consulta ai é um "produto" que eu exibo as informações dos mesmos. Esse meu código é limpo e qualquer iniciante ler e entende. Porque eu quero fazer uma só consulta para exibir vários produtos? porquê estou fazendo uma consulta para cada produto e utilizei o ORDER BY RAND() para realizar um "sorteio", mas só que os produtos estão se repetindo.

 

Obs: Eu até poderia fazer uma só consulta com o WHILE e exibir os 10 produtos, mas o html é diferente em cada produto. entende?

 

<?php
include
"../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
<div class=\"box2 box-inner\">
<img src=\""
. $row['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">"
. $row['title'] ."</div>
<div class=\"city\">"
. $row['país_ou_estado'] ."</div>
</div>
<a href=\""
. $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div>
"
;
}
mysql_close($con);
?>
<?php
include
"../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
<div class=\"box3 box-inner\">
<img src=\""
. $row['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">"
. $row['title'] ."</div>
<div class=\"city\">"
. $row['país_ou_estado'] ."</div>
</div>
<a href=\""
. $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div>
"
;
}
mysql_close($con);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php  

$i = 0;

include "../connect-bd.php";

$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 10 ");

while($row = mysql_fetch_array($result)) {

$i++;

echo "

<div class=\"box{$i} box-inner\">

entendeu ? ai vai trazer 10 resultados sem repetir, e colocar a classe dinâmicamente ali.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe mas ainda não é a solução.

Como eu já falei, e cito de novo. Terá que ser algo tipo isso:

<?php
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
<div class=\"box1 box-inner\">
<img src=\"". $row['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">". $row['title'] ."</div>
<div class=\"city\">". $row['país_ou_estado'] ."</div>
</div>
<a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div>
";
echo "
<div class=\"box3 box-inner\">
<img src=\"". $row['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">". $row['title'] ."</div>
<div class=\"city\">". $row['país_ou_estado'] ."</div>
</div>
<a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div>
";
}
?>

 

Viram? são dois ECHO, e cada um se trata de um produto diferente. Eu acredito que tenha que vim algo antes do ECHO para dizer que ali já é outro produto, e dando continuação a consulta sem repetir produtos que já foram inseridos. :upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que a pergunta que irei fazer parece ser boba ... mas...

 

como, em forma de relatório ou saída - sem postar nada em código, vc espera que o sistema imprima as informações?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

- Caro GCAS, visite meu site: http://voosehoteis.com.br

E veja na parte: DESTINOS ESPECIAIS, passe o mouse em cima dos box's e veja o que acontece. Clique nas miniaturas do slide também e repare as informações.

 

Estou usando este código para cada box:

<?php  
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
<div class=\"box1 box-inner\">
<img src=\"". $row['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">". $row['title'] ."</div>
<div class=\"city\">". $row['país_ou_estado'] ."</div>
</div>
<a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div> 
";
  }
?>

Esse código se repete em cada box, mas como usei ORDER BY RAND() os resultados estão se repetindo. E também não posso usar esse WHILE porque o html é diferente em cada box. Eu preciso de uma só consulta para os 10 produtos. Não é um loop. Loop eu faço de olhos fechados. ENTENDEU ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O html q você postou é o mesmo com a diferença de 1 número.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara...

 

verifique sua base de dados, lá pode ter alguma coisa repetida, ou, já que não queres coisas repetidas, utilize distinct

 

select DISTINCT pagina from travel where pagina = 'destinos'

 

que com esta query você vai pegar apenas o que for diferente, sacou?! que em randomico pode ter o risco de pegar algo repetido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe! o código é assim:

<?php  
include "../connect-bd.php";
$result = mysql_query("SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_array($result)) {
echo "
<div class=\"box1 box-inner\">
<img src=\"". $row['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">". $row['title'] ."</div>
<div class=\"city\">". $row['país_ou_estado'] ."</div>
</div>
<a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div> 
";
echo "
<div class=\"box1 box-inner\">
<img src=\"". $row['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">". $row['title'] ."</div>
<div class=\"city\">". $row['país_ou_estado'] ."</div>
</div>
<a href=\"". $row['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div> 
";
  }
?>

As imagens são repetida porem o titulo, descrição e o destino(exemplo: Brasília) são diferentes.

Tá parecendo que é uma coisa para um SÊNIOR...

Se possível, me dê um exemplo com esse meu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha...

 

pelo que entendi, não se faz necessário um "rand()" (mas caso queira algo aleatório) no order by já que você quer resultados distintos, e não aleatórios.

 

Já que no site estava aparecendo ocorrências iguais, logo perguntei se tinha algum dado replicado.

 

$query = "SELECT * FROM travel WHERE pagina = 'destinos' ORDER BY RAND() LIMIT 5";

 

$exec = mysql_query($query);

 

for($i=0;$i<mysql_num_rows($exec);$i++){

$linha = mysql_fetch_array($exec);

echo "
<div class=\"box1 box-inner\">
<img src=\""
. $linha['image'] ."\" alt=\"\" />
<div class=\"box-hover\">
<div class=\"box-caption\">
<div class=\"tag-line\">"
. $linha['title'] ."</div>
<div class=\"city\">"
. $linha['país_ou_estado'] ."</div>
</div>
<a href=\""
. $linha['link'] ."\" class=\"link\"><span class=\"icon-double-angle-right\"></span></a>
</div>
</div>
"
;

}

 

tente algo nesse sentido

Compartilhar este post


Link para o post
Compartilhar em outros sites

você já tentou fazer algo do tipo assim ? note que a Variavel "$limite" tem inicio e término do que vc quer mostrar, e o "$quando" determina que tipo de post ou catégoria vc quer mostrar em sua página se você listar por categorias diferentes vc pode colocar que e inicia do "0" separa por "," (virgula) e dá a quantidade de post que vc quer que apareça na página

 

 

<?php
include "../connect-bd.php";

if($recupera == 'primeiro_post'){ //aqui recupera o que ouver dentro do Primeiro if dentro do loop
$limite = '0, 6'; // aqui você define onde começa o limite e até que quantidade quer mostrar, sem repetir os demais
$quando = 'destinos'; //aqui você da a condição para que ele só mostre o que você quer que seja mostrado
}

else if($recupera == 'segundo_post'){ //aqui recupera o que ouver dentro do segundo if dentro do loop
$limite = '6, 4'; // aqui você define onde começa o limite e até que quantidade quer mostrar, sem repetir os demais
$quando = 'destinos'; //aqui você da a condição para que ele só mostre o que você quer que seja mostrado
}

else if($recupera == 'terceiro_post'){ //aqui recupera o que ouver dentro do terceiro if dentro do loop
$limite = '10, 3'; // aqui você define onde começa o limite e até que quantidade quer mostrar, sem repetir os demais
$quando = 'destinos'; //aqui você da a condição para que ele só mostre o que você quer que seja mostrado
}

$result = mysql_query("SELECT * FROM travel WHERE pagina = '$quando' LIMIT $limite")
or die(mysql_error());
if(@mysql_num_array($result) <= 0) echo 'nada encontrado';
else{
while($row = mysql_fetch_array($result)) {
?>
<?php
if($recupera == 'primeiro_post'){ // aqui se inicia o primeiro laço de consultas
?>
<li>
<div class="slide-holder">
<img src="<?php echo $row['image'] ?>" alt=""/>
<div class="caption">
<p><?php echo $row['title'] ?></p>
</div>
<div class="city"><?php echo $row['país_ou_estado'] ?></div>
</div>
</li>
<?php
}else if($recupera == 'segundo_post'){ // aqui se inicia o segundo laço de consultas
?>
<li>
<div class="slide-holder">
<img src="<?php echo $row['image'] ?>" alt=""/>
<div class="caption">
<p><?php echo $row['title'] ?></p>
</div>
<div class="city"><?php echo $row['país_ou_estado'] ?></div>
</div>
</li>
<?php
}else if($recupera == 'terceiro_post'){ // aqui se inicia o terceiro laço de consultas
?>
<li>
<div class="slide-holder">
<img src="<?php echo $row['image'] ?>" alt=""/>
<div class="caption">
<p><?php echo $row['title'] ?></p>
</div>
<div class="city"><?php echo $row['país_ou_estado'] ?></div>
</div>
</li>
<?php } ?>
<?php
}
}
?>

<?php $recupera = 'primeiro_post'; include"teste.php"; ?> <!--/*este include recupera cada laço de repetição onde voê quer que seu loop liste os dados em sua página*/-->

<?php $recupera = 'segundo_post'; include"teste.php"; ?><!--/*este include recupera cada laço de repetição onde voê quer que seu loop liste os dados em sua página*/-->

<?php $recupera = 'terceiro_post'; include"teste.php"; ?><!--/*este include recupera cada laço de repetição onde voê quer que seu loop liste os dados em sua página*/-->

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use "WHERE NOT IN".

 

Acrescente em uma lista cada interação.

Após o primeiro select:

$ja_foi = $row['id'];

No segundo select, adicione

" AND id NOT IN($ja_foi)"

Após o segundo select:

$ja_foi .= ', ', $row['id'];

No terceiro select, adicione

" AND id NOT IN($ja_foi)"

Assim, os resultados dos SELECTs anteriores não entram na busca dos posteriores.

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.