2009-09-10 3 views
0

J'ai le code suivant pour la recherche de plusieurs mots-clés dans un titre de document qui fonctionne bien. Je veux maintenant avoir une colonne qui montre le nombre de mots-clés qui se trouvent dans chaque ligne de titre et l'ordre d'une manière descendante. Par exemple, si je suis à la recherche de « congé de maternité » Je devrais obtenir quelque chose comme ceci:Trier le tableau par nombre de mots-clés trouvés

Nom - Mots-clés trouvé

politique Congé de maternité - 2

politique de congé annuel - 1

Les conseils de maternité pour les futures mamans - 1

Espérons que cela a du sens, Merci beaucoup!

Dim s As String = TextBox1.Text 

    Dim SqlQuery As String = "SELECT Doc_LibraryTable.DocID, Doc_LibraryTable.DocName, Doc_LibraryTable.DocType WHERE Doc_LibraryTable.DocType = DocType" 

    Dim ints As String() = s.Split(" ") 
    Dim i As Integer 

    If UBound(ints) >= 1 Then 
     SqlQuery += " AND (Doc_LibraryTable.DocName LIKE '%" + ints(0) + "%'"  

     For i = 1 To UBound(ints) 
      If Not ints(i) = "of" And Not ints(i) = "the" And Not ints(i) = "in" And Not ints(i) = "or" Then 
       SqlQuery += " OR Doc_LibraryTable.DocName LIKE '%" 
       SqlQuery += ints(i) + "%'" 
      End If 
     Next 



    ElseIf UBound(ints) < 1 Then 
     For i = 0 To UBound(ints) 
      SqlQuery += " AND (Doc_LibraryTable.DocName LIKE '%" 
      SqlQuery += ints(i) + "%" 
     Next 

    End If 

    If UBound(ints) >= 1 Then 
     SqlQuery += ")" 
    ElseIf UBound(ints) < 1 Then 
     SqlQuery += "')" 
    End If 

    SqlDataSource2.SelectCommand = SqlQuery 
    GridView1.DataSource = SqlDataSource2 

Répondre

0

Vous pouvez faire mon modifier votre clause SELECT dans une boucle et en utilisant l'instruction CASE, par exemple:

Dim SqlQuery As String = "SELECT Doc_LibraryTable.DocID, Doc_LibraryTable.DocName, Doc_LibraryTable.DocType, " 
Dim sep as String = "" 
For i = 0 To UBound(ints) 
    SqlQuery += sep + "CASE WHEN Doc_LibraryTable.DocName LIKE '%" + ints(i) + "%' THEN 1 ELSE 0 END" 
    sep = " + " 
Next 
SqlQuery += " as MatchCount WHERE Doc_LibraryTable.DocType = DocType" 
+0

C'est ce que je cherchais. Fonctionne parfaitement, merci beaucoup !!!! –

0

Une autre façon qui est un peu en désordre est de faire quelque chose comme

select ... 
, len(replace([DocName],'Maternity leave','Maternity leave' + '*')) - len([DocName]) 
    As NameHits 

J'ai utilisé le code suivant pour tester ceci: -

set nocount on; 
declare @t as table([name] varchar(10)) 
insert into @t values ('a bb c') 
insert into @t values ('aa bc c') 

declare @find varchar(5) 
set @find = 'bc' 

select 
    *, 
    len(replace([name],@find,@find + '*')) - len(name) 

from @t 
+0

En fait, cela ne trouvera que l'expression "congé de maternité" et peut-être ne pas convenir! – Rippo

Questions connexes