Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Evilkenzera

com LIKE AND e OR

Recommended Posts

Fiz 2 campos de pesquisa:

 

Primeiro campo o usuário escreve o nome do produto ou o código para pesquisa no mesmo campo

Segundo campo em conjunto, um list menu onde o usuário seleciona promoção: Sim ou Não

 

Só estou conseguindo pesquisar por código e produto, a promocao está sendo ignoranda.

 

Alguém pode me dar uma dica?

 

 

 

varPesquisa = Request.form("Pesquisa")

varPesquisa = Trim(Replace(varPesquisa, "'", ""))

 

varPesquisa2 = Request.form("Pesquisa2")

varPesquisa2 = Trim(Replace(varPesquisa2, "'", ""))

 

 

rs.Source = "SELECT * FROM produto WHERE Produto LIKE '" & varPesquisa & "%'

OR cod_produto LIKE '" & varPesquisa & "%'

AND promocao LIKE '%" & varPesquisa2 & "%' ORDER BY produto "

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente a seguinte string = "SELECT * FROM produto WHERE ((Produto LIKE '" & varPesquisa & "%') OR (cod_produto LIKE '" & varPesquisa & "%')) AND (promocao LIKE '%" & varPesquisa2 & "%') ORDER BY produto"

 

Se não der certo, poste aí.

Flows

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz 2 campos de pesquisa:

 

Primeiro campo o usuário escreve o nome do produto ou o código para pesquisa no mesmo campo

Segundo campo em conjunto, um list menu onde o usuário seleciona promoção: Sim ou Não

 

Só estou conseguindo pesquisar por código e produto, a promocao está sendo ignoranda.

 

Alguém pode me dar uma dica?

 

 

 

varPesquisa = Request.form("Pesquisa")

varPesquisa = Trim(Replace(varPesquisa, "'", ""))

 

varPesquisa2 = Request.form("Pesquisa2")

varPesquisa2 = Trim(Replace(varPesquisa2, "'", ""))

 

 

rs.Source = "SELECT * FROM produto WHERE Produto LIKE '" & varPesquisa & "%'

OR cod_produto LIKE '" & varPesquisa & "%'

AND promocao LIKE '%" & varPesquisa2 & "%' ORDER BY produto "

Camarada,

 

Usar LIKE com OR é pesado e degrada performance do banco de dados. Aqui onde trabalho o pessoal do AD condena a tortura uma soluçaõ destas. http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

 

A dica do quintelab é válida e deve funcionar mas se for um banco de dados mtos registros você poderá ter problemas com desempenho.

 

Sugiro implementar a sugestão do quintelab e verificar o plano de execução. Sugiro tb você utilizar o UNION de seguinte forma:

 

SELECT * FROM produto WHERE Produto LIKE '" & varPesquisa & "%'AND promocao LIKE '%" & varPesquisa2 & "%'UNION ALL SELECT * FROM produto WHERE Produto  cod_produto LIKE '" & varPesquisa & "%' AND promocao LIKE '%" & varPesquisa2 & "%' ORDER BY produto

Implemente as duas sugestões e verifique no Plano de execução que têm melhor performance.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sabia disse sobre ficar mais lento.

Eu vou tentar isso que você me passou, e depois eu volto pra dizer se deu certo.

 

Obrigado a todos que responderam

Pois é não quer dizer que não possa ser utilizado.. vai existir certas situações em que você não têm outra solução dai pode ser usado.

 

Mas todos IN´s,OR´s e LIKE´s tendem a pesar na performance do banco de dados. Sempre que possivel é mais indicado utilizar UNION´s, EXIST`s e NOT EXIT´s mas cada caso é um caso.

 

Aqui onde trablaho somo proibidos de utilzar sp dinâmica (usar EXEC @VARIAVEL) mas em certas ocacioes não tem como fugir.

 

Não quer dizer que existem tabus mas que sempre é bom pesar mto bem projetar e analisar as soluções adotadas.

 

Com diria o meu instrutor de SQL "muita calma nesta hora!"

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que o QUINTELAB passou, realmente funcionou.Porém fiquei muito interessado no código que você me passou, más não estou conseguindo faze-lo funcionar.Tá dando esse erro:Tipo de erro:Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' cod_produto LIKE '%' AND promo LIKE '%%' ORDER BY produto' at adm_produto.asp, line 30---------------------------------------------------------------------------------------------------------------------------------rs.Source = "SELECT * FROM produto WHERE Produto LIKE '" & varPesquisa & "%' AND promo LIKE '%" & varPesquisa2 & "%' UNION ALL SELECT * FROM produto WHERE Produto, cod_produto LIKE '" & varPesquisa & "%' AND promo LIKE '%" & varPesquisa2 & "%' ORDER BY produto "Se não for pedir muito, será que você poderia me dar uma mãozinha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza!!

 

Troque:

rs.Source = "SELECT * FROM produto WHERE Produto LIKE '" & varPesquisa & "%' AND promo LIKE '%" & varPesquisa2 & "%' UNION ALL SELECT * FROM produto WHERE Produto, cod_produto LIKE '" & varPesquisa & "%' AND promo LIKE '%" & varPesquisa2 & "%' ORDER BY produto "

Por:

rs.Source = "SELECT * FROM 	produto WHERE 	Produto LIKE '" & varPesquisa & "%' AND promo LIKE '%" & varPesquisa2 & "%' UNION ALL SELECT 	* FROM 	produto WHERE 	cod_produto LIKE '" & varPesquisa & "%' AND promo LIKE '%" & varPesquisa2 & "%' ORDER BY produto "

 

Acho que vai funcionar.

 

Bom com disse a dica do QUINTELAB funcionaria mas em bancos com mtos registros pode pesar o desempenho.

 

QQ coisa estamos ai!!

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.