Charly,
se voce sabe a ordem que as coisas devem aparecer, por que voce não cria uma
tabela com os "id's" na ordem desejada e faz um join ordenando pela chave da
nova tabela?
 
Espero ter ajudado!
 
[]'s
Marcio
  _____  

From: [email protected]
[mailto:[email protected]] On Behalf Of Pablo
Sánchez
Sent: quarta-feira, 7 de outubro de 2009 18:13
To: Comunidade PostgreSQL Brasileira
Subject: Re: [pgbr-geral] Ordenando por Where in


Sim, mas como te disse:

estou usando uma lib, que faz um parser para fazer a paginação. E a versão
da lib que está sendo usada não está aceitando esse order by, gerando um SQL
inválido para criar o limit. Se eu tiro o order by, tudo funciona, ou seja,
o SQL está ok, mas fica tudo fora de ordem (claro). E fora de ordem não
atende...

O que preciso é substituir o order by de alguma forma...

Galera, deixa para lá, vou é ver se corrijo o bug da lib (não deveria, mas
vou. não deveria porque é a versão 0.11, e já está na 1.1.4! O que deveria
poder é fazer o upgrade para a última versão e ser feliz, mas infelizmente
não sou eu quem decide, e como eu estou para ir embora desse trampo semana
que vem mesmo, acho que vou deixar isso como uma tarefa pendente e focar
meus esforços no resto da aplicação).


2009/10/7 Charly Frankl <[email protected]>


Uma pergunta para compreender melhor a tua consulta. O atributo "l.no_item"
seria o individuo pelo qual você precisa ordenar? ou não tem nenhum atributo
dentro desta pesquisa que determine a ordem, mas sim (apenas) a ordem
apresentada no IN ? 


Att,


-- 
Charly Frankl
http://javadevilopers.blogspot.com/
[email protected]
Linux user #391083




2009/10/7 Pablo Sánchez <[email protected]>


O problema é ter que construir uma query que ordene os elementos pelo
resultado de uma outra query. 


Estou usando uma lib numa versão em que ao usar order by na coluna
descritiva do item dá um crash no paginador.

Então eu faço uma primeira query, para pegar os ids na ordem que eu preciso,
e agora preciso fazer uma segunda query que me retorne os itens listados na
ordem que recebi na primeira listagem.

O problema é que todas as soluções apresentadas resultaram em uma consulta
que retorna tal qual está no banco, ou em sintaxe inválida (o order by in,
por exemplo).

Query de exemplo. Note que no where in os itens estão fora de ordem, eu
preciso que venha nessa ordem aparentemente aleatória (mas é o resultado do
order by o nome do item):

SELECT l.nu_seq_item_asdf AS l__nu_seq_item_asdf,
       l.st_possui_recuperacao AS l__st_possui_recuperacao,
       l.nu_ano AS l__nu_ano, l.no_item_abreviado AS l__no_item_abreviado,
       l.no_item AS l__no_item,
       l2.nu_seq_item_asdf_qwer AS l2__nu_seq_item_asdf_qwer,
       l2.vl_aquisicao_qwer AS l2__vl_aquisicao_qwer,
       l2.vl_reforma_qwer AS l2__vl_reforma_qwer,
       l3.nu_seq_item_asdf_municipio AS l3__nu_seq_item_asdf_municipio,
       l3.vl_aquisicao_municipio AS l3__vl_aquisicao_municipio,
       l3.vl_reforma_municipio AS l3__vl_reforma_municipio,
       l4.co_municipio_qwer AS l4__co_municipio_qwer,
       l4.no_municipio AS l4__no_municipio, l4.sg_uf AS l4__sg_uf
  FROM qwerqwer.s_item_asdf l LEFT JOIN qwerqwer.s_item_asdf_qwer l2
       ON l.nu_seq_item_asdf = l2.nu_seq_item_asdf
       LEFT JOIN qwerqwer.s_item_asdf_municipio l3
       ON l.nu_seq_item_asdf = l3.nu_seq_item_asdf
     AND l3.co_municipio_qwer = '520870'
       LEFT JOIN qwerqwer.d_municipio l4
       ON l3.co_municipio_qwer = l4.co_municipio_qwer
     AND l3.co_municipio_qwer = '520870'
 WHERE l.nu_seq_item_asdf IN
          (207,
           206,
           204,
           205,
           288,
           289,
           199,
           198
          )





_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral






-- 
=================================
Pablo Santiago Sánchez
Análise e Desenvolvimento de Sistemas Web
Zend Certified Engineer #ZEND006757
[email protected]
(61) 9975-0883
http://www.sanchez.eti.br
http://www.corephp.com.br
"Quidquid latine dictum sit, altum viditur"
=================================

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a