• 0
Sign in to follow this  
Carlos Rocha

Problema Com Duplicidade

Question

Olá pessoal!

To fazendo uma busca da seguinte forma

A pessoa digita por exemplo "O que o Mario que é legal gosta?"

Eu separo as palavras repetidas e fica:

"O que Mario é legal gosta"

E jogo cada uma numa matriz e faço uma busca no banco de dados por cada palavra:

1 - Busco por "O"

2 - Busco por "Mario"

3 - Busco por "é"

4 - Busco por "legal"

5 - Busco por "gosta"

Só que na hora de imprimir o resultado, nos resultados da busca por "Mario", repete resultado da busca por "O".

E eu queria excluir, na verdade impedir que quando a busca chegar em "Mario", na hora de imprimir os resultados

de "Mario", os que já extiverem sido mostrados nos resultados de "O", não sejam mostrados de novo, e assim suscessivamente

com os resultados de "é", "legal" e "Gosta".

Na verdade, to criando um sistema de peguntas frequentes e preciso evitar que a cada nova palavra digitada na frase chave,

seja repetida a mesma pergunta.

Vai aí o Código que to usando, tem uma observação no local do erro, se alguém puder me ajudar, desde já agradeço.

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

  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="tbModulo.DfNomeModulo like  '%"&palavra&"%' or tbfaq.DfPergunta like  '%"&palavra&"%' or tbfaq.DfResposta  like '%"&palavra&"%'"     'String Sql busca letra por letra
   'onde="DfPergunta like  '"&palavra&"' or DfResposta  like '"&palavra&"' "     'String Sql busca palavra por palavra
  
    'Cria o Select
    Conectar objConecta, objRecordSet, "SELECT tbFaq.DfIdFaq, tbModulo.DfNomeModulo, tbFaq.DfIdUsuario, tbFaq.DfPergunta, tbFaq.DfResposta, tbFaq.DfVersao FROM tbFaq INNER JOIN tbModulo ON tbfaq.DfidModulo = tbModulo.DfIdModulo where " & onde & ""

    if not objRecordSet.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>Versao</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, faq_resposta, faq_versao
      Do Until objRecordSet.EOF = True
        faq_id = objRecordSet("DfIdFaq")
        faq_modulo = objRecordSet("DfNomeModulo")	
        faq_autor = objRecordSet("DfIdUsuario")	
        faq_pergunta = objRecordSet("DfPergunta")	
        faq_versao = objRecordSet("DfVersao")	
  
      ' If registro <> faq_id then (nesse momento preciso evitar a repetição. to usando esse algoritimo ma num ta dando.
           if (cor = 1) then
               bg = "#E8ECEE"
               cor = 2
           else
               bg = "#d3dbde"
               cor = 1
           end if

           Conectar objConecta, objRecordSetNomeAutor, "select * from tbUsuario where DfIdUsuario = '"&faq_autor&"'"
           NomeAutor = objRecordSetNomeAutor("DfNomeUsuario")

        response.Write "<tr bgcolor="&bg&">"   
           response.Write "<td width=50  height=20>"&faq_id&"</td>"
           response.Write "<td width=70  height=20>"&faq_modulo&"</td>"
           response.Write "<td width=320 height=20>"&faq_pergunta&"</td>"
           response.Write "<td width=100 height=20>"&NomeAutor&"</td>" 
           response.Write "<td width=100 height=20>"&faq_versao&"</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>"
       'End if
     registro = faq_id
        objRecordSet.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
%>


Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

dá uma olhada nesse pequeno script para evitar palavras repetidas:

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 ' para evitar palavras pequenas ex: é , sim, tem , não é opcional

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

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

end if

next

Share this post


Link to post
Share on other sites
  • 0

Certa ves postei uma duvida e recebi este script como resposta, mas encontrei outro mais facil e usei ele no inicio do meu arquivo, mas a duvida agora é outra, observe de novo minha pergunta e vera a diferença.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this