Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Ribeiro

Busca por multiplas palavras

Recommended Posts

Olá pessoal,

 

estou trabalhando em um sistema de busca para listar produtos, e estou com o seguinte problema:

 

Quando digito duas palavras e as mesmas estão cadastradas no banco é retornado o resultado corretamente,

 

mas quando digito duas palavras e somente uma esta cadastrada no banco não é retornado nenhum resultado.

 

 

Tenho que fazer funcionar assim:

 

Se digitar "Som Automotivo" e a palavra "Automotivo" não existir, então o sistema tem que retornar apenas o resultado da palavra "Som".

 

OU

 

Se digitar "Som Automotivo de São Paulo" e a palavra "Automotivo" não existir, então o sistema tem que retornar apenas o resultado das palavras "Som de São Paulo".

 

Já pesquisei e tentei de várias formas, estava vendo a opção de filtrar mas também não funcionou.

 

 

Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

torne o termo de pesquisa em um array e monte o sql dinamicamente

 

termo = request.querystring("termo")
arrayTermo = split(termo, " ")
for i = 0 to ubound(termo)
sql = sql & " COLUNA LIKE '%" & arrayTermo(i) & "%' "
if i < ubound(arrayTermo) then sql = sql & " OR "
next

sql = "SELECT * FROM TABELA WHERE " & sql & " "

lembrando que isso pode arrebentar com o banco se a tabela tiver muitos registros e colunas com muitos caracteres. Crie indices, se for o caso uma tabela exclusiva para esse tipo de busca ou rever a necessidade de ter essa complexidade. Não esqueça que mesmo assim será case sensitive, acentos e maiusculas/minusculas farão diferença

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá jonathandj, obrigado por responder...

 

fiz da forma que você me falou, mas esta dando erro Tipos incompatíveis: 'ubound'.

 

fiz varias alterações mas não consegui resolver isso, o que pode estar acontecendo?

 

 

 

 

torne o termo de pesquisa em um array e monte o sql dinamicamente

 

termo = request.querystring("termo")
arrayTermo = split(termo, " ")
for i = 0 to ubound(termo)
sql = sql & " COLUNA LIKE '%" & arrayTermo(i) & "%' "
if i < ubound(arrayTermo) then sql = sql & " OR "
next

sql = "SELECT * FROM TABELA WHERE " & sql & " "

lembrando que isso pode arrebentar com o banco se a tabela tiver muitos registros e colunas com muitos caracteres. Crie indices, se for o caso uma tabela exclusiva para esse tipo de busca ou rever a necessidade de ter essa complexidade. Não esqueça que mesmo assim será case sensitive, acentos e maiusculas/minusculas farão diferença

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade teve um errinho aqui

 

arrayTermo = split(termo, " ")
for i = 0 to ubound(termo)

apenas substitua o ubound(termo) por ubound(arrayTermo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

que é isso john isso foi só um detalhe que certamente você avisaria assim que entrasse aqui denovo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode armazenar o resultado da primeira select em array,como citado acima, depois rodar a segunda dentro de um while, usando o valor da array a cada vez que rodar o while. Isso vai funcionar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá a todos,

 

fiz a substituição, mas agora esta com erro na clausula WHERE, foi feito algumas adaptações...

 

estava fazendo uma comparação e mesmo tendo removido a comparação continua o erro na clausula WHERE.

 

termo = request.querystring("prod")
arrayTermo = split(termo, " ")
for i = 0 to ubound(arrayTermo)
Temp = Temp & " COLUNA LIKE '%" & arrayTermo(i) & "%' "
if i < ubound(arrayTermo) then Temp = Temp & " OR "
next

Temp="Select * From tbl_produtos Where " & Temp	 & "  " 

Tabela.Open Temp, Conexao 
If Tabela.BOF And Tabela.EOF Then

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o k esta sendo passada

Temp="Select * From tbl_produtos Where " & Temp  & "  "
response.write(temp)
response.end()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Eu dei um response.write e não esta passando nada.

 

Select * from tbl_produtos where

 

depois disso não apresenta mais nada,

 

 

dá um response.write na sua string SQL para ver o k esta sendo passada

Temp="Select * From tbl_produtos Where " & Temp  & "  "
response.write(temp)
response.end()

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim:

 

Temp = Temp & " COLUNA LIKE '%" & arrayTermo(i) & "%' "
if i < ubound(arrayTermo) then 
Temp = Temp & " OR "next
SQL="Select * From tbl_produtos Where " & Temp  & "  "

você estava colocando o Temp atribuindo um valor acima e depois setava outro valor

verifique o k esta sendo passado no arrayTermo(i)

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.