[firebase-br] RES: RES: RES: Otimizar Where

Felix - Sol Informática felix em soltecnologia.com.br
Ter Dez 20 10:17:39 -03 2011


Helio, besteira nenhuma; apenas observe que eu pretendo facilitar, então o
usuário "não precisa" informar qual o tipo de dado que está sendo digitado -
o próprio sistema reconhecerá, fazendo uma busca no banco pela informação.

Estou procurando algo como:

Select [campos] from [tabela] [inner join] 
where IF   FOUND PLACA
      then PLACA = :xTexto
      else automovel containing :xTexto or 
           nome      containing :xTexto 

Talvez a construção de uma procedure seja o melhor caminho.

Fco. Felix
www.soltecnologia.com.br


-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Hélio Oliveira
Enviada em: terça-feira, 20 de dezembro de 2011 08:55
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] RES: RES: Otimizar Where

Bom dia Felix!

Creio que da forma que mencionei na minha thread anteior você só tenha 
um select e a depender do que o usuário selecionar no filtro você monte 
a condição... tipo:

sql_text = select x.*
	   from carro x;
case comboCampo.ItemIndex of
   0 : sql_text = sql_text + where x.placa = :xplaca
   1 : --- veiculo
   2 : --- proprietario
end;

Desta forma você terá apenas um select..

desculpe se estiver falando besteira.
> Magno, eh que estou tentando facilitar para o usuário; acho que um sistema
> pode, em algumas circunstancias, "prever" o que o operador precisa - como
> neste caso, localizar um veiculo a partir de qualquer informação.
>
> Agora, me resta otimizar o processo do select. Realmente, 2 selects
resolvem
> o problema - e já uso assim em algumas partes do programa. Mas queria
achar
> maneira de fazer em 1 só ;-)
>
> Fco. Felix
> www.soltecnologia.com.br
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
Em
> nome de Magno System
> Enviada em: segunda-feira, 19 de dezembro de 2011 23:21
> Para: FireBase
> Assunto: Re: [firebase-br] RES: Otimizar Where
>
> Posso estar falando besteira mas só com dois selects, procurando primeiro
> pela placa e caso não ache nenhum registro você faz um outro select
> procurando pelo proprietário ou veículo. Se fosse "AND" em vez de "OR",
> acredito que o FIREBIRD usaria um índice de placas (caso existisse) e se
não
>
> encontrasse nenhum registro nem pesquisaria pelo PROPRIETÁRIO e VEÍCULO,
> visto que o "AND" obrigaria a placa existir (mas neste caso como você
falou
> a placa é única e nem necessitaria a pesquisa do PROPRIETÁRIO OU VEÍCULO).
> Mas como a cláusula é OR e você tem um CONTAINING o Firebird não usará
> índices para achar o PROPRIETÁRIO E VEÍCULO e obrigatoriamente percorrerá
> cada registro do banco.
>
> Acho que a melhor maneira seria o usuário selecionar o que quer pesquisar
e
> você fazer a pesquisa direto pelo campo que ele quer. Ou então pesquisar
> pela placa e caso não encontre pelo PROPRIETÁRIO OU VEÍCULO.
>
> Software House Magno System
> Site: www.magnosystem.com.br
> Email: magno em speet.com.br
> Tel.: (35)3371-2337 / (35) 9129-7634
>
>
> ----- Original Message -----
> From: "Felix - Sol Informática"<felix em soltecnologia.com.br>
> To: "'FireBase'"<lista em firebase.com.br>
> Sent: Monday, December 19, 2011 11:01 PM
> Subject: [firebase-br] RES: Otimizar Where
>
>
> Campo no Delphi:
>
> Informe Veículo: [ EdVeiculo : TEdit ] (Hint: Informe Placa ou Automovel
ou
> Proprietário)
>
> Então, eu pesquiso no banco da seguinte maneira:
> 1. pela placa - que obviamente será única e individual - não existem 2
> registros com a mesma placa;
> 2. pelo automóvel - poderão existir vários veículos com a descrição
'CIVIC';
> 3. pelo proprietário - um proprietário 'JOSE' poderá ter vários veículos
> cadastrados.
>
> Select (campos)
>    from veiculo
>    inner join proprietario on veiculo.codprop = proprietario.codprop
>    where
>       veiculo.placa = :xveiculo or
>       veiculo.automovel containing :xveiculo or
>       proprietario.nome containing :xveiculo
>
> parambyname('xveiculo').asstring := EdVeiculo.Text
>
> Caso o sistema retorne 1 só registro (em qualquer das condições acima) eu
já
> apresento as informações pertinentes; caso contrário é mostrada uma janela
> para seleção do registro correto.
>
> A pesquisa é feita de forma rápida, não estou reclamando do tempo; mas
deve
> haver uma forma de acelerar o processo, fazendo o banco trabalhar o mínimo
> possível.
>
> Seria algo como:
> Se achou a placa, não precisa pesquisar mais nada; retornar registro;
> Se não achou a placa, pesquisar por automóvel - retornar o(s) registro(s)
> encontrado(s);
> Se não achou o automóvel, pesquisar por proprietário - retornar o(s)
> registro(s) encontrado(s).
>
> Se não é possível fazer via sentença SQL, como seria uma SP para isso?
> Obrigado.
>
> Fco. Felix
> www.soltecnologia.com.br
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
Em
> nome de Alysson Gonçalves de Azevedo
> Enviada em: segunda-feira, 19 de dezembro de 2011 21:28
> Para: FireBase
> Assunto: Re: [firebase-br] Otimizar Where
>
> Se fazer questão de que essa "escolha" seja feita no DB e não no delfão,
> usa Stored Procedure Seletável...
>
>
> Alysson Gonçalves de Azevedo
> (11) 8491-7730
>
>
>
> Em 19 de dezembro de 2011 21:22, Hélio Oliveira
> <hpensador em gmail.com>escreveu:
>
>> Boa noite Felix!
>>
>>
>>
>>   Estou pensando em otimizar uma consulta, que inicialmente é do tipo:
>>> Select * from veiculo where placa = :xplaca OR veiculo containing
>>> :xveiculo
>>>
>>> Acontece que se ele achar 1 registro onde [placa = :xplaca], não será
>>> necessário realizar o [OR veiculo containing] que é mais demorado.
>>>
>>> Não pretendo fazer 2 consultas separadas; alguma sugestão?
>>>
>>
>> Não sei qual é sua realidade, porém eu uso em situações como esta o
>> seguinte: na tela de pesquisa tenho além do campo onde será digitado a
>> informação a ser pesquisada um combo onde o Cliente irá dizer em qual
> campo
>> quer fazer a pesquisa, daí a partir do que for selecionado eu monto a
> minha
>> SQL dinamicamente.
>>
>> --
>> []'s,
>>
>> Hélio Oliveira
>> Bel. Ciência da Computação
>> Técnico em Contabilidade
>> e-mail : hpensador em gmail.com
>> Skype : hpensador
>> http://hpensador.blogspot.com/
>> (71) 9975-9176
>>
>>
>>
>> ______________________________**________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>
>
http://www.firebase.com.br/fb/**artigo.php?id=1107<http://www.firebase.com.b
> r/fb/artigo.php?id=1107>
>> Para consultar mensagens antigas:
> http://firebase.com.br/**pesquisa<http://firebase.com.br/pesquisa>
>>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>


-- 
[]'s,

Hélio Oliveira
Bel. Ciência da Computação
Técnico em Contabilidade
e-mail : hpensador em gmail.com
Skype : hpensador
http://hpensador.blogspot.com/
(71) 9975-9176


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista