Lipearu 0 Denunciar post Postado Julho 19, 2009 ola galera, tenho um script em PHP e ele tem seu banco de dados Mysql. eh o seguinte teno o array $destaque = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 4"); ele randomiza o resultado ateh tudo bem. mas ele repete os resultados. e nao deveria. pq sao 4 resultados diferentes. e ele repetes alguns. gostaria que nao repetisse. alguem pode me da uma luz???? vlwww Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Julho 19, 2009 ele NAO repete, ele soh repetiria se houvesse linhas repetidas na tabela pra remendar (e nao resolver) SELECT distinct * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 4 Compartilhar este post Link para o post Compartilhar em outros sites
Lipearu 0 Denunciar post Postado Julho 19, 2009 mas eh o seguinte eu tenho 4 arrays $destaque = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 4"); $destaque2 = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 4"); $destaque3 = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 4"); $destaque4 = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 4"); ai la no site em um quadro eu chamo o $destaque ai no outro quadro chamo o $destaque2 depois no outro $destaque3 e no ultimo o $destaque4. esses quatro resultados eu quero que aparecão sem repetir. as vezes um aparece igual ao outro. vlw pela resposta Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Julho 19, 2009 logico q vai repetir assim neh, você deve executar a consulta apenas uma vez e ler a matriz de resultado Compartilhar este post Link para o post Compartilhar em outros sites
Lipearu 0 Denunciar post Postado Julho 19, 2009 mas uma vez fiz e nao repetia mas nao lembro mais. era com semente. logico q vai repetir assim neh,poiseh isso eu sei. mas queria que nao repetisse você deve executar a consulta apenas uma vez e ler a matriz de resultadomas assim nao repetiria? eh como tava e repete todos o 4 dai Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Julho 19, 2009 Sua dificuldade eh PHP, e nao MySQL... $sql = "SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 4"; $array_destaque = mysql_query($sql) or die(mysql_error()); while ($destaque = mysql_fetch_array($array_destaque)) { echo "$destaque[0] - $destaque[1] - $destaque[2] <br>"; } Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 20, 2009 Amigo, o fato de repetir os valores é consequencia de ser aleatório. Porém, isso é simples resolver: $destaques = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 16"); //Limite em 16 e não em 4 if ( $destaques ){ for ( $i = 0 , $row = mysql_fetch_array( $destaques ) ; ( $i < 4 ) && $row ; $i++ ){ //destaque 1 } for ( $i = 4 , $row = mysql_fetch_array( $destaques ) ; ( $i < 8 ) && $row ; $i++ ){ //destaque 2 } for ( $i = 8 , $row = mysql_fetch_array( $destaques ) ; ( $i < 12 ) && $row ; $i++ ){ //destaque 3 } for ( $i = 12 , $row = mysql_fetch_array( $destaques ) ; ( $i < 16 ) && $row ; $i++ ){ //destaque 4 } } Compartilhar este post Link para o post Compartilhar em outros sites
Lipearu 0 Denunciar post Postado Julho 20, 2009 ae você entendeu minha duvida. mas o codigo que passou nao funcionou, continua repetindo.. olha como ficou. $destaque = mysql_query ("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 16"); $destaque2 = mysql_query ("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 16"); $destaque3 = mysql_query ("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 16"); $destaque4 = mysql_query ("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 16"); if ( $destaques ){ for ( $i = 0 , $row = mysql_fetch_array( $destaque ) ; ( $i < 4 ) && $row ; $i++ ){ //destaque 1 } for ( $i = 4 , $row = mysql_fetch_array( $destaque2 ) ; ( $i < 8 ) && $row ; $i++ ){ //destaque 2 } for ( $i = 8 , $row = mysql_fetch_array( $destaque3 ) ; ( $i < 12 ) && $row ; $i++ ){ //destaque 3 } for ( $i = 12 , $row = mysql_fetch_array( $destaque4 ) ; ( $i < 16 ) && $row ; $i++ ){ //destaque 4 } } Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 20, 2009 Deve ficar apenas assim: $destaques = mysql_query ("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND() LIMIT 16"); if ( $destaques ){ for ( $i = 0 , $row = mysql_fetch_array( $destaques ) ; ( $i < 4 ) && $row ; $i++ ){ //destaque 1 } for ( $i = 4 , $row = mysql_fetch_array( $destaques ) ; ( $i < 8 ) && $row ; $i++ ){ //destaque 2 } for ( $i = 8 , $row = mysql_fetch_array( $destaques ) ; ( $i < 12 ) && $row ; $i++ ){ //destaque 3 } for ( $i = 12 , $row = mysql_fetch_array( $destaques ) ; ( $i < 16 ) && $row ; $i++ ){ //destaque 4 } } Isso porque antes era limitado a apenas 4 registros, como você possui 4 quadros de destaques (4x4=16) passamos a limitar em 16, sendo assim basta uma única consulta que irá retornar todos os 16 registros de forma aleatória. Quando a consulta retornar você usa os 4 loops for para recuperar em blocos de 4 (que era o limite inicial), o primeiro loop pega os 4 primeiros, o segundo os 4 próximos, o terceiro..... Compartilhar este post Link para o post Compartilhar em outros sites
Lipearu 0 Denunciar post Postado Julho 20, 2009 fiz exatamente como tai. randomiza tudo igual agora. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 20, 2009 Como assim randomiza tudo igual? Está funcionando? Ou sempre aparece igual? Carlos Eduardo PS: Não faça quote do post completo de cima. Só da parte que for necessária, se for necessária. Fica mais fácil de ler. Compartilhar este post Link para o post Compartilhar em outros sites
Lipearu 0 Denunciar post Postado Julho 20, 2009 pronto ja consegui. utilizei uma semente. vejam. $semente = rand(); $destaque = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND($semente) LIMIT 0,1"); $destaque2 = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND($semente) LIMIT 1,1"); $destaque3 = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND($semente) LIMIT 2,1"); $destaque4 = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND($semente) LIMIT 3,1"); obrigado a todos que me ajudaram. viram só simples neh?! e eu tentado ateh por if. hehehehhe Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Julho 20, 2009 Lipearu, experimente fazer assim, vai diminuir considerávelmente a carga no seu banco de dados: $destaques = array(); $query = mysql_query("SELECT * FROM automoveis WHERE dest_inicial = 1 ORDER BY RAND($semente) LIMIT 4"); while ($dados = mysql_fetch_assoc($query)) { $destaques[] = $dados; } // print_r($destaques); Você terá $destaques[0], $destaques[1], $destaques[2] e $destaques[3] que serão, respectivamente, cada um dos quatro destaques buscados. A diferença é que assim você faz uma consulta só e garante que não irá pegar resultados iguais. ;) http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites