Сортировать таблицу по количеству найденных ключевых слов - PullRequest
0 голосов
/ 10 сентября 2009

У меня есть следующий код для поиска по нескольким ключевым словам в заголовке документа, который отлично работает.Теперь я хочу иметь столбец, который показывает количество ключевых слов, найденных в каждой строке заголовка, и порядок по убыванию.Например, если я ищу «Отпуск по беременности и родам», я должен получить что-то вроде этого:

Имя - Ключевые слова найдены

Политика декретного отпуска - 2

Ежегодный отпускполис - 1

Рекомендации по беременности и родам для будущих мам - 1

Надеюсь, что это имеет смысл, Большое спасибо!

    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

Ответы [ 2 ]

0 голосов
/ 10 сентября 2009

Еще один немного запутанный способ - сделать что-то вроде

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

Я использовал следующий код для проверки этого: -

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 голосов
/ 10 сентября 2009

Вы можете сделать это, изменив ваше предложение SELECT в цикле и используя оператор CASE, например ::

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"
...