Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida Com O Comando Like


Carlos Rocha

Pergunta

O comandoSql

Like '%"&variavel"&%'

Faz pesquiza por toda a fraze ou palavra digitada certo?

Como faço como por exemplo para no caso da frase:

E no apartamento da madame

usando o comando for do asp do asp, entrara no loop as pesquizas

e, no, apartamento, da, madame

O que eu preciso, é que a pesquiza não seja feita quando encontrar caracters como

e, no, da,

Isso tem geito

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Guest - André -

sua dúvida não ficou muito clara:

primeiro você quer dividir a string, depois pesquisar as outra partes?

Tem como sim, mas expôe melhor seu problema, pra desenvolvermos um script pra você.

[]´s

Link para o comentário
Compartilhar em outros sites

  • 0

Tenho uma FAQ no meu site.

To fazendo um sistema de busca que sera feita da seguinte forma:

No campo de busca a pessoa digita uma frase que é a sua duvida, dai, é feita uma busca nos campos pergunta e resposta da tabela, porem tem que ser uma busca por aproximação, para que a pessoa não seja obriogada a descobrir exatamente como estão digitadas as perguntas e respostas no nosso banco certo?

Porem, eu tive a ideia de dividir a frase numa matriz em que cada palavra da frase sera uma opção de busca, dai vem as minhas dificudades,

Se a pessoa digitar uma frase em que uma mesma palavra é escrita duas vezes, por exemplo -- Como fazer como o João Fez?(temos que imaginar o usuario fazendo de tudo, certo?)

Nesse caso, a palavra como gerará uma consulta em duplicvidade e por conseguinte uma impressão em duplicidade do mesmo tópico.

E é isso que quero resolver.

Abaixo, segue meu código, se tiver tempo e puder me ajudar nessa, desde já estou agradecendo.

Foi o que eu consegui.

<%
If REQUEST.QUERYSTRING("action") = "consultar" then
  Dim busca, onde, pesq, sql, x, strSQL, Rs_SELECT, bg, DfId, DesenharTabela, cor, Rs_FaqSelectModulo, ModuloNome            'Declara as variaveis.
  Dim laco, buscadas, considera, palavra, palavra2, pergunta

  DesenharTabela = False

  busca=trim(request.form("chave"))
  laco=split(busca,chr(32))
  x = 0
  considera = true
  buscadas = array()
  for each palavra in laco
    if x > 0 then
       for each palavra2 in buscadas
          if palavra = palavra2 then
             considera = false
          end if
       next
       if considera = true then
          redim preserve buscadas(Ubound(buscadas)+1)
          buscadas(Ubound(buscadas)) = palavra
       end if
    else
       redim preserve buscadas(Ubound(buscadas)+1)
       buscadas(Ubound(buscadas)) = palavra
       x = x + 1
    end if
    considera = true
  next
  for each palavra in buscadas
   ' palavra=busca(x)                        'Entrega à variavel palavra, cada uma das palavras em separado para fazer a busca
	palavra = replace(palavra,"a","[a,á,à,ã,â,ä,A]")    'Trata as palavras acentuadas como que sem acento ou com acenmto
    palavra = replace(palavra,"e","[e,é,è,ê,ë,E]")
    palavra = replace(palavra,"i","[i,í,ì,î,ï,I]")
    palavra = replace(palavra,"o","[o,ó,ò,õ,ô,ö,O]")
    palavra = replace(palavra,"u","[u,ú,ù,û,ü,U]")
    palavra = replace(palavra,"c","[c,ç]")
   onde="DfPergunta like  '%"&palavra&"%' or DfMemo  like '%"&palavra&"%' "     'String Sql busca letra por letra
'  onde="DfPergunta like  '"&pesq&"' or DfMemo  like '"&pesq&"' "     'String Sql busca palavra por palavra
  
    'Cria o Select
    strSQL = "select * from tbFaq where " & onde & ""
    Set Rs_SELECT = server.createobject("ADODB.Recordset")
    Rs_SELECT.Open strSQl,Conn , 3, 3


    if not Rs_SELECT.eof = true  then    'Tem registros, cria o la&ccedil;o para impress&atilde;o no la&ccedil;o for      
      if DesenharTabela = False then
         'Criando desenho tabela
         response.Write "<br><p>"
         response.Write "<table border='0' width=95% align=center cellspacing='1', cellpading='2'>"  
         response.Write "<tr bgcolor=#8193A7>"
         response.Write "<td width=50  align=center height=20><font color=#FFFFFF><b>ID</b></fonte></td>"
         response.Write "<td width=70  align=center height=20><font color=#FFFFFF><b>Modulo</b></fonte></td>"
         response.Write "<td width=320 align=center height=20><font color=#FFFFFF><b>Pergunta</b></fonte></td>"
         response.Write "<td width=100 align=center height=20><font color=#FFFFFF><b>Autor</b></fonte></td>" 
         response.Write "<td width=100 align=center height=20><font color=#FFFFFF><b>Visualizar</b></fonte></td>" 
         response.Write "</tr>"  
         DesenharTabela = True         
   End if

      dim faq_id, faq_modulo, faq_autor, faq_pergunta
      Do Until Rs_Select.EOF = True
        faq_id = Rs_SELECT("DfId")
        faq_modulo = Rs_SELECT("DfModulo")	
        faq_autor = Rs_SELECT("DfAutor")	
        faq_pergunta = Rs_SELECT("DfPergunta")	

        if (cor = 1) then
          bg = "#E8ECEE"
          cor = 2
        else
          bg = "#d3dbde"
          cor = 1
        end if
  
	strSQl = "select * from tbModulo where DfId = '"&faq_modulo&"'"
        Set Rs_FaqSelectModulo = server.createobject("ADODB.Recordset")
        Rs_FaqSelectModulo.Open strSQl,Conn , 3, 3
        ModuloNome = Rs_FaqSelectModulo("DfNome")

        response.Write "<tr bgcolor="&bg&">"   
        response.Write "<td width=50  height=20>"&faq_id&"</td>"
        response.Write "<td width=70  height=20>"&ModuloNome&"</td>"
        response.Write "<td width=320 height=20>"&faq_pergunta&"</td>"
        response.Write "<td width=100 height=20>"&faq_autor&"</td>" 
        response.Write "<td width=100 height=20 align=center><a href=verfaq.asp?action=1&id="&faq_id&"><img src=../imagens/ver.ico width=25 border=0></a></td>" 
        response.Write "</tr>"

        rs_Select.MoveNext
      Loop 
    end if

  next  'Fim do la&ccedil;o for
  
  if DesenharTabela = False then
        response.Write "<table align=center width=200 height=50 border=2><tr><td>"
        response.Write "<center>Não há resultados</center>"
        response.Write "</td></tr></table>"
  else
        response.Write "</table>"    
  END IF
END IF
%>

Editado por cyberalexxx
Link para o comentário
Compartilhar em outros sites

  • 0
Guest - André -

Vamos lá então:

Obs. Como não conheço as origens nem destino de seu código, derrepente poderiamos desenvolver um cláusula em group by no SQL.

Bom, mas depende muito do destino e da sua necessidade, entaum desenvolvi um script para manipular o tratamento da sua frase:

entaum:

<%

response.write"Por André Ferreira Lima em 28/03/2005<br>"

palavra = "como fazer como o João Fez" ' aqui a sua string

dim separada(10)'Um array para obter as palavras

cont=0 ' Um contador para manipularmos o array

for i=1 to len(palavra)'num caracteres

var=mid(palavra,i,1)

str=str&var

if var=" " then' espaços em branco significa próxima palavra

cont=cont+1

separada(cont)=str

str="" ' então zeramos a string

end if

next

cont=cont+1

separada(cont)=str ' para não perdermos a última palavra

for i=1 to cont ' para evitar palavras repetidas

for i2=1 to cont

if separada(i)=separada(i2) and not i=i2 then

separada(i)=""

end if

next

next

for i3=1 to cont

if not len(separada(i3)) < 4 then

Response.Write(separada(i3)&"<br>")

end if

next

%>

agora é so você colocá-las na sua clausula like e obterá os resultados desejados.

Lembrando que SEPARADA trata-se de uma matriz.

qualquer dúvida poste!!!!

[]´s

André

Kwead.com ano5

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...