Ir para conteúdo

POWERED BY:

Arquivado

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

Lipearu

[Resolvido] Comando RAND repete resultados

Recommended Posts

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

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

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

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

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 resultado

mas assim nao repetiria? eh como tava e repete todos o 4 dai

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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

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

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

×

Informação importante

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