bestao 0 Denunciar post Postado Junho 16, 2014 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
jgustavo99 85 Denunciar post Postado Junho 16, 2014 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
bestao 0 Denunciar post Postado Junho 17, 2014 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
GCAS 11 Denunciar post Postado Junho 17, 2014 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
bestao 0 Denunciar post Postado Junho 17, 2014 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
GCAS 11 Denunciar post Postado Junho 17, 2014 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
bestao 0 Denunciar post Postado Junho 18, 2014 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? <?phpinclude "../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);?><?phpinclude "../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
William Bruno 1501 Denunciar post Postado Junho 18, 2014 <?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
bestao 0 Denunciar post Postado Junho 18, 2014 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
GCAS 11 Denunciar post Postado Junho 18, 2014 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
bestao 0 Denunciar post Postado Junho 18, 2014 - 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
William Bruno 1501 Denunciar post Postado Junho 18, 2014 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
GCAS 11 Denunciar post Postado Junho 18, 2014 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
bestao 0 Denunciar post Postado Junho 18, 2014 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
GCAS 11 Denunciar post Postado Junho 19, 2014 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
Kukka_web 0 Denunciar post Postado Agosto 27, 2014 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 <?phpinclude "../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)) {?><?phpif($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
Massaki 47 Denunciar post Postado Agosto 27, 2014 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