População de banco

Pessoal, estou fazendo um sistema aqui no Yii e tive uma dúvida de infra.

Vou fazer um select no banco onde daqui a alguns dias este select vai poder retornar um máximo em alguns casos 30 mil registros.

Vou precisar colocar estes registros em um array para calcular médias junto a resultados de outro select.

Vocês acham que vou ter muitos problemas de desempenho?

Joga esses cálculos para o banco usando procedures, functions, views…

Cara, este problema vc vai ter com o yii e com qualquer outro fw. Vc não tem como otimizar isso não?

Veja se vc tem realmente que fazer o select, ou pode usar cache. As classes do Yii pra usar cache funcionam muito bem.

Eu posso usar cache sim, vou deixar para usar quando todos os dados estiverem inseridos. Agora eu gerei outro problema, rs

Criei esta query para pegar dados do banco:

No controller:




      $sql = "select count(idficha),datacadastro From fichausuario where  idusuario = $idusuario group by datacadastro order by datacadastro";

  	$desempenho=Fichausuario::model()->findAllBySql($sql);



Na view:

Funcionou:




if($desempenho)

  foreach($desempenho as $desempenho){

	echo "'".$desempenho->datacadastro."',";

  }



Não funcionou:




	if($desempenho)

  	foreach($desempenho as $desempenho){

    	echo "".$desempenho->count(idficha).",";

	}



O problema esta aqui:


$desempenho->count(idficha)

Como eu faço para pegar o resultado do count(idficha) ? sendo que meu array deve estar retornando mais ou menos assim:

count(idficha), datacadastro

30, 2011-03-16

44, 2011-03-17

41, 2011-03-18

30, 2011-03-13

Mude seu SQL para




   	$sql = "select count(idficha) contagem,datacadastro From fichausuario where  idusuario = $idusuario group by datacadastro order by datacadastro";

  	$desempenho=Fichausuario::model()->findAllBySql($sql);



E use




if($desempenho)

  foreach($desempenho as $desempenho){

 	echo "'".$desempenho->contagem."',";

  }



Deve funcionar

Na teoria funciona, já tinha testado fazendo a query rodar no phpmyadmin.

mas no Yii ele informa que o model não tem o atributo definido

Property "Fichausuario.contagem" is not defined.

O problema está no foreach. Você está sobrescrevendo o array ao repetir o nome da variável.

ERRADO:


if($desempenho)

  foreach($desempenho as $desempenho){

        echo "'".$desempenho->contagem."',";

  }

CORRETO:


if($desempenho)

  foreach($desempenho as $linha){

        echo "'".$linha->contagem."',";

  }

Na verdade não era isso, continua o mesmo erro, acredito que isso só iria interferir se eu usar o array em outro lugar. Mas de qualquer jeito o foreach estava errado também.

Esta apresentando este erro:

Property "Fichausuario.contagem" is not defined.

Acho que é pq a não tenho a variavel "contagem" atribuida em meu model. Acho que se não houver solução para acessar o valor de count como neste exemplo pode ser um bug do Yii.

Você ou mais alguém já fez algo que utilizasse o count desta forma? Quando utilizo o count e ele retorna só uma linha ai não tenho problema, mas neste caso ele retorna mais de uma linha.

no sql




'select count(idficha) as count_fichas'



no model




class MinhaModel extends CModel{

  public $count_fichas;

}



ae no loop




	echo $linha->count_fichas;



Isso aew, é isso mesmo que estava faltando, criar o atributo com o mesmo nome no Model. Isso porque não tem este atributo no banco de dados, muito obrigado todo mundo. Precisando estamos ai.

Desculpe-me Breno, eu não tinha olhado o post completo, só passei o olho e vi o problema do foreach.

Agora está tudo ok?

Que isso, não precisa se desculpar, você acabou achando um outro erro que apesar de não estar gerando problemas no momento poderia causar um problema sério no futuro, muito obrigado.