Ir para conteúdo

POWERED BY:

Arquivado

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

jruiz

order by rand()

Recommended Posts

http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Tenho uma tabela com vários registros de imóveis cadastrados por corretor. Para extrair os 10 corretores mais ativos, por exemplo, dou um select assim:

 

$select_list="SELECT corretor, COUNT(*) AS n_imov FROM imoveis GROUP BY corretor ORDER BY n_imov DESC LIMIT 10"; Até aí beleza.

 

Eu gostaria de embaralhar esse resultado. Tenho certeza que já fiz algo assim e deu certo:

 

$select_list="(SELECT corretor, COUNT(*) AS n_imov FROM imoveis GROUP BY corretor ORDER BY n_imov DESC LIMIT 10) ORDER BY RAND()";

 

Testei várias vezes e funcionou. Agora não está funcionando mais (não sei se houve mudança de versão do php ou do mysql.

 

De qualquer forma, você sabe como eu posso obter esse resultado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo. O sistema retornou a seguinte mensagem:"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/rcaceara/public_html/testes/teste.php on line 10"As linhas são:6 $select_list="(SELECT corretor, COUNT(*) AS n_imov FROM imoveis GROUP 7 BY corretor ORDER BY RAND(n_imov) DESC LIMIT 10)";8 mysql_query($select_list, $dbh);9 $result_list = mysql_query($select_list);10 while ($lista = mysql_fetch_array($result_list)){PS.: a conexão está ativa. Se colocar um select comum, como esse aí embaixo, funciona normalmente:$select_list="SELECT corretor, COUNT(*) AS n_imov FROM imoveis GROUP BY corretor ORDER BY n_imov DESC LIMIT $qtde_cor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí funciona o ORDER BY RAND(), mas o SELECT não pega os mais ativos. Isso porque o ORDER BY DESC LIMIT 10 deixa de funcionar. O objetivo desse comando é extrair, em um universo de centenas corretores, os dez mais ativos "...n_imov FROM imoveis GROUP BY corretor ORDER BY n_imov DESC LIMIT 10".Aí, nesse universo restrito de epenas 10 corretores eu quero embaralhar, ou seja, é como se no 1º comando eu extraio e crio uma tabela com os 10 mais ativos e em um 2º comando eu extraio todos os registros ordenados de forma randômica.Aceito todas as sugestões...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela tentativa, mas não funfa assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ow pq oc num faz sua conexao normal e depois oc trata a array do resultado para organizar de forma randomica

 

assim:

 

PHP

[*]$select_list="SELECT corretor, COUNT(*) AS n_imov FROM imoveis GROUP BY corretor ORDER BY n_imov DESC LIMIT 10";

[*]

[*]$result_query = mysql_query($select_list, $dbh);

[*]

[*]$linhas = mysql_fetch_assoc($result_query);

[*]

[*]// **************************************** //

[*]

[*]$array_embaralhada = shuffle($linhas);

 

se der certo oc me falah pq eu nunca usei esse shuffle ae hehehehe

 

http://forum.imasters.com.br/public/style_emoticons/default/hug.gif

^^CAV

Compartilhar este post


Link para o post
Compartilhar em outros sites

No lugar de:

PHP

[*]$linhas = mysql_fetch_assoc($result_query);

 

Deve ser:

PHP

[*]while ($rs = mysql_fetch_assoc($result_query))

[*]{

[*] $linhas[] = $rs;

[*]}

 

Pois a intenção é ter todas as infos. das linhas afetadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP

[*]while ($rs = mysql_fetch_assoc($result_query)

[*]{ 

[*] $linhas[] = $rs; 

[*]}

[*]

 

é hehe malz rsrsrs

 

mas naum sei por q while pulah o primeiro registro encontrado, seria legal utilizar do while

 

PHP

[*]do

[*]{ 

[*] $linhas[] = $rs; 

[*]} while ($rs = mysql_fetch_assoc($result_query));

[*]

 

http://forum.imasters.com.br/public/style_emoticons/default/hug.gif

^^CAV

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.