Jump to content


Photo

[Resolvido] Busca - Todas As Palavras, Qualquer Palavra, Frase Exata..


  • Faça o login para participar
2 replies to this topic

#1 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 12/12/2008, 09:26

eu tenho uma query, por exemplo

xp win ptbr

se eu simplesmente substituir os espaços por " or " ou " and " não rola.
Se eu substituir os espaços por "%" ele retorna realmente a pesquisa por todas as palavras, mas na ordem digitada

se tiver "win xp" ele não vai encaixar na query "xp win".

algm da uma luz, tenho certeza de qeu é a dúvida de muita gente, até porque ja analisei vários sisteminhas de busca prontos e os que eu analisei tem essa limitação, só busca por uma palavra isolada, pela frase exata ou por todas as palavras, mas na ordem em que são digitadas.

todas as palavras independente da ordem e qualquer das palavras, necas.

:(

parece que estou aprendendo.

Róla fazer isso?

"select * from TABELA where COLUNA like 'palavra1' and COLUNA like 'palavra2'"

daí eu faria várias consultas sucessivas à mesma coluna. To sem servidor nesse computador amanhã faço testes

quero substituir o espaço por replace(trim(query)," ","' and COLUNA like '")

resolvido galera, olha a treta que eu fiz


busca = trim(request.querystring("busca")) 'trim para tirar os espaços antes e depois. evitar de dar pau
busca = replace(busca, " ","%' AND comentario like '%") 'substitui os espaços entre uma palavra e outra por esses símbolos

daí na instrução eu fiz assim:
set RS = Conn.Execute("SELECT * FROM links WHERE comentario LIKE '%" & busca & "%'")

da para fazer uns esquemas legais com essa rotina, algo do tipo

if request.querystring("tipo") = "todos_termos" then
busca = trim(request.querystring("busca"))
busca = replace(busca, " ","%' AND comentario like '%")
else
if request.querystring("tipo") = "qualquer_termo" then
busca = trim(request.querystring("busca"))
busca = replace(busca, " ","%' OR comentario like '%")
else
if request.querystring("tipo") = "frase" then
busca = trim(request.querystring("busca"))
else
if request.querystring("tipo") = "pela_ordem" then '* explicação abaixo
busca = trim(request.querystring("busca"))
busca = replace(busca, " ","%")
else
end if
end if
end if
end if

* Pela ordem, pesquisa por todos os termos mas que apareçam na ordem digitada. Exemplo, se digitar "XP win" não vai retornar "win XP", porque as palavras aparecem em ordem diferente. Recurso que eu achei interessante para pesquisar por palavras parciais, se pesquisar por "win xp" vai retornar tanto "winxp" quanto "win XP", "windowsXP" "windows XP"... Legal né?

Edição feita por: JurisCode, 12/12/2008, 09:27.


#2 gmogames

gmogames

    SuaRota.com.br

  • Usuários
  • 155 posts
  • Sexo:Não informado
  • Localidade:Americana/SP

Posted 14/12/2008, 21:14

JurisCode,

O unico problema que eu vi sessa sua busca é que você faz o TRIM no Request.Querystring("busca~).

Se eu pesquisar por "win xp ptbr" esse seu trim antes do replace vai fazer com que essa minha busca vire "winxpptbr" pois ele vai tirar todos os espacos da query.

Se você quiser tirar os espacos do inicio e fim da query somente, utilize LTRIM e RTRIM.

Abcs!
http://www.suarota.com.br
O maior guia de hoteis, restaurantes, agências de turismo, albergues e eventos na internet!!!!!


Guilherme K. Mogames
contato@suarota.com.br

#3 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 15/12/2008, 16:50

ja corrigi isso

a primeira coisa que fiz foi o trim só para tirar os espaços postos no form por engano, depois faz os replaces.

testado e aprovado, muito eficiente por sinal




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq