Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Nigre

[Resolvido] Montar Array com Resultados de uma consulta no Banco

Recommended Posts

Pessoal, tenho uma função que gera uma nuvem de tags, mas ela trabalha com uma array pré-definida assim:

 

$arr = array('Actionscript' => 35, 'Adobe' => 22, 'Array' => 44, 'Background' => 43, 'Blur' => 18);

Mas eu gostaria de fazer uma consulta no meu banco para puxar as tags e seu valor (quantidade de vezes que aparecem) e com este resultado montar uma array como a de cima ali. Eu tentei fazer o seguinte:

 

function get_tag_data() {

	mysql_select_db($database_connPMMC, $connPMMC);

	$query = "SELECT tags, COUNT(id) AS quantidade FROM tags GROUP BY tags ORDER BY tags ASC";
	$rsTagCloud = mysql_query($query, $connPMMC) or die(mysql_error());

	while ($row_rsTagCloud = mysql_fetch_array($rsTagCloud)) {
    	$array = array($row_rsTagCloud['tags'] => $row_rsTagCloud['quantidade']);
	}
	return $array;
}

 

Mas daí, quando faço o teste, é como se a array tivesse apenas um registro. Como fazer colocar todaas as tags dentro da array?

Compartilhar este post


Link para o post
Compartilhar em outros sites

$array = array();

while ($row_rsTagCloud = mysql_fetch_array($rsTagCloud)) 
{
   $array[] = $row_rsTagCloud['tags'] = $row_rsTagCloud['quantidade'];
}

print_r($array);
print_r($qtd);

 

EDITEI: eu mosquei

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça assim

$array = array();
 while ($row_rsTagCloud = mysql_fetch_array($rsTagCloud)) {
        $array[$row_rsTagCloud['tags']] = $row_rsTagCloud['quantidade'];
        }
        return $array;

Veja se resolve.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos Eduardo, deu certinho! Valeu aí!

 

Agora eu queria ordenar primeiro pelas tags com mais acessos, mas colocando-as em ordem aleatória. Eu consigo usar ORDER BY RAND(), quantidade DESC, mas não ao contrários, ou seja, primeiro pra pegar os mais acessados e depois sortear. Há outra maneira?

 

 

function get_tag_data() {

mysql_select_db($database_connPMMC, $connPMMC);

  query = "SELECT tags, COUNT(id) AS quantidade FROM tags GROUP BY tags ORDER BY quantidade DESC LIMIT 30";
 $rsTagCloud = mysql_query($query, $connPMMC) or die(mysql_error());
 $total = mysql_num_rows($rsTagCloud);

    $array = array(); 
 while ($row_rsTagCloud = mysql_fetch_array($rsTagCloud)) {
     	$array[$row_rsTagCloud['tags']] = $row_rsTagCloud['quantidade'];    	
   }    	
   return $array;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim? Ordenado mas aleatório? Não entendi nada, mas você pode fazer assim. Pega ordenado pela quantidade e depois dá um shuffle no array.

 

http://br.php.net/shuffle

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos Eduardo, com o Shuffle não rolou, mas consegui fazer assim:

 

$query = "(SELECT tags, COUNT(id) AS quantidade FROM tags GROUP BY tags ORDER BY quantidade DESC LIMIT 30) ORDER BY RAND()";

Assim, ela pega as 30 tags mais buscadas, e depois embaralha essas 30 tags.

Agora, para incrementar, como poderia fazer esta query limitar também para os resultados dos últimos 30 dias, ou do último mês, por exemplo? Na minha tabela há uma campo DATE e um TIME, que armazenam a data e hora em que a tag foi gravada.

 

Abç

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí é dúvida para o fórum de Mysql, porque é dúvida na consulta. Então, vou mover pra lá.

 

Tópico Movido

PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Mysql

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.