Faire une recherche en mettant plusieurs mots clés séparés par un espace dans un champ

 Aéronautique  Astronomie  Géologie  Météorologie  Végétaux
 Animaux  Biologie Santé  Informatique  Paléontologie  
 Archéologie  Chimie  Mathématiques  Physique  

Faire une recherche en mettant plusieurs mots clés séparés par un espace dans un champ

Dim queryStr, keywords
keywords = Trim(Request.Form("keywords"))
operateur_logique = (Request.Form("logique"))

Récupération des infos du formulaire.

Keywords contient les mots clés
logique recupère si les mots clés sont associés avec AND ou OR

if keywords <> "" then
   myarraykeywords = Split(keywords)
   NbTabIndice_keywords=UBound(myarraykeywords)
end if

Les mots clés sont séparé et mis dans un tableau
NbTabIndice_keywords indique la dimension du tableau, c'est à dire le nombre de mots clés écrit.

queryStr = "SELECT id, title, start_date, close_date FROM ANO_problems " & _
               "WHERE status=" & Cfg(adoCon, "CloseStatus") & " AND ("

Le début de la requette indépendante du nombre de mots clés. remarquez AND ( qui ouvre les conditions de recherche avec les mots clés

dim p_keywords
p_keywords = 0

For p_keywords=0 to NbTabIndice_keywords

      if operateur_logique = 1 then
       whereStr = whereStr & " (description LIKE '%"& myarraykeywords(p_keywords)&"%' " & _
           " OR solution LIKE '%" & myarraykeywords(p_keywords) & "%' " & _
           " OR UPPER(title) LIKE UPPER('%" & myarraykeywords(p_keywords) & "%')) AND ("
      else
   whereStr = whereStr & " (description LIKE '%"& myarraykeywords(p_keywords)&"%' " & _
            " OR solution LIKE '%" & myarraykeywords(p_keywords) & "%' " & _
            " OR UPPER(title) LIKE UPPER('%" & myarraykeywords(p_keywords) & "%')) OR ("
      End If

NEXT

 

 

On fait une boucle qui tourene autant de fois qu'il y a de mots clés.

On fait la recherche dans les champs description, solution et title

si j'ai choisi d'associer avec AND c'est la première partie
Si j'ai choisi d'associé les mots clés avec OR c'est la deuxième partie

Bien faire attention aux parenthèses afin d'associer correctement les opérateurs logiques

 

if operateur_logique = 1 then
         if Mid (whereStr , Len(whereStr)-4,5) = "AND (" then
            whereStr = Mid (whereStr , 1 , Len(whereStr) -5)
         end if
         else
         if Mid (whereStr , Len(whereStr)-3,4) = "OR (" then
            whereStr = Mid (whereStr , 1 , Len(whereStr) -4)
         end if
end if

 

Il faut enlever le dernier AND ( ou le dernier OR ( de la boucle.

if NbTabIndice_keywords > 0 then
   Dim q_keywords
   q_keywords=0
      for p_keywords=0 to NbTabIndice_keywords
         if myarraykeywords(p_keywords) <> "" and q_keywords= 0 then
            whereStr = whereStr & ")"
            q_keywords=q_keywords+1
         end if
      next
end if

 

Permet de générer la dernière parenthèse derrière le dernier mot- clé.

whereStr = whereStr & ") ORDER BY start_date ASC"

 

Penser a la dernière parenthèse concernant tous les mots-clés
queryStr = queryStr & whereStr On associe le début de la requette avec la requette construite
Set srchRes = SQLQuery(adoCon, queryStr) Execution de la requette

Rq : Si vous faites un copier-coller de ce code ca ne marchera pas, car les lignes ne seront pas forcément coupé au bon endroit. C'est pour cette raison que j'ai marqué en orange la dernière lettre de chaque ligne.

Hit-Parade