Inscrições abertas para nosso Webinar anual Adianti Framework 2024!
Clique aqui para saber mais
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 ...

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 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.             
  4.             // creates a repository for Propriedade
  5.             $repository = new TRepository('Propriedade');
  6.             
  7.             $limit 10;
  8.             $criteria = new TCriteria;
  9.                         
  10.             // default order
  11.             if (empty($param['order']))
  12.             {
  13.                 $param['order'] = 'id'///////////////////////////////////////////////AQUI
  14.                 $param['direction'] = 'desc';
  15.             }                              
  16.                        
  17.             $criteria->setProperties($param); // order, offset
  18.             
  19.             $criteria->setProperty('limit'$limit);
  20.            $repository = new TRepository('Propriedade');           
  21.                   
  22.            $filter->add(new TFilter(.................
  23.           
  24.             if ($objects)
  25.             {
  26.                 foreach ($objects as $object)
  27.                  {
  28.                  //// demais codigos
  29.                  }
  30.          }
  31.         $count$repository->count($criteria);
  32. ?>
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. <?>