ORDER BY coluna ASC|DESC com TCriteria Estou fazendo um relatório e preciso ordenar o valor crescente ou decrescente. Segui este exemplo mas dá erro. http://www.adianti.com.br/forum/pt/view_587?ordem-inversa-na-datagrid SQLSTATE[42803]: Grouping error: 7 ERRO: coluna "produtos.valor_venda" deve aparecer na cláusula GROUP BY ou ser utilizada em uma função de agregação ... ...
LA
ORDER BY coluna ASC|DESC com TCriteria  
Estou fazendo um relatório e preciso ordenar o valor crescente ou decrescente.
Segui este exemplo mas dá erro.

www.adianti.com.br/forum/pt/view_587?ordem-inversa-na-datagrid

SQLSTATE[42803]: Grouping error: 7 ERRO: coluna "produtos.valor_venda" deve aparecer na cláusula GROUP BY ou ser utilizada em uma função de agregação ...

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (8)


MG

Você está usando "sum" ou outra função de agregação do SQL?
LA

Ola Marcelo, Obrigado!
Era isso, tirei este contador e funcionou:

 
  1. <?php
  2. $total = MeuModel::countObjects($criteria);
  3. ?>

MG

Luis legal que deu certo.
Mas de fato não é um problema.
Acredito que esteja usando o Mysql.
A partir da versão 5.7 (senão me engano), houve mudanças na forma de montar agregação..
LA

Uso Postgre
MC

Não sei se é o caso, mas

 
  1. <?php
  2. TTransaction::open('permission');
  3. // creates a repository for Propriedade
  4. $repository = new TRepository('Propriedade');
  5. $limit = 10;
  6. $criteria = new TCriteria;
  7. // default order
  8. if (empty($param['order']))
  9. {
  10. $param['order'] = 'id'; ///////////////////////////////////////////////AQUI
  11. $param['direction'] = 'desc';
  12. }
  13. $criteria->setProperties($param); // order, offset
  14. $criteria->setProperty('limit', $limit);
  15. $repository = new TRepository('Propriedade');
  16. $filter->add(new TFilter(.................
  17. if ($objects)
  18. {
  19. foreach ($objects as $object)
  20. {
  21. //// demais codigos
  22. }
  23. }
  24. $count= $repository->count($criteria);
  25. ?>
MC

Publicou a resposta acima antes de eu escrever tudo..... rs
Você pode fazer a ordenação diretamente no Repository e se for o caso, apresentar a váriável $count direto no relatório ou em um message

 
  1. <?php
  2. if (isset($param['search']) AND $param['search']){
  3. if ($count > 0){
  4. new TMessage('info','A busca retornou ' . $count . ' registros');
  5. }
  6. else{
  7. new TMessage('error','A busca não retornou registros');
  8. }
  9. }
  10. ?>
CR

Pode ser assim também...


 
  1. <?php>
  2. $campo01 = 1;
  3. $campo02 = 2;
  4. $objeto = Produto::where('campo01', '=', $campo01)
  5. ->where('campo02', '=', $campo02)
  6. ->orderBy('campo01 desc, campo02', 'asc')
  7. ->load();
  8. <?>


Resultado: select campo01, campo02 from produto where (campo01 = 1 and campo02 = 2) order by campo01 desc, campo02 asc

CR

 
  1. <?php>
  2. //Pode ser assim também...
  3. $campo01 = 1;
  4. $campo02 = 2;
  5. $objeto = Produto::where('campo01', '=', $campo01)
  6. ->where('campo02', '=', $campo02)
  7. ->orderBy('campo01 desc, campo02', 'asc')
  8. ->load();
  9. // Resultado:
  10. // select campo01, campo02 from produto where (campo01 = 1 and campo02 = 2) order by campo01 desc, campo02 asc
  11. <?>