【问题标题】:Sort table by number of keywords found按找到的关键字数量对表格进行排序
【发布时间】:2010-11-27 04:40:40
【问题描述】:

我有以下代码用于在文档标题中搜索多个关键字,效果很好。我现在想要一列显示在每个标题行中找到的关键字数量并以后代方式排序。例如,如果我正在搜索“产假”,我应该得到这样的结果:

名称 -- 找到的关键字

产假政策 -- 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

【问题讨论】:

    标签: keyword rank relevance


    【解决方案1】:

    您可以在循环中修改您的 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"
    

    【讨论】:

      【解决方案2】:

      另一种有点混乱的方法是做类似的事情

      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
      

      【讨论】:

      • 其实这样只会找到“产假”这个词,可能不太合适!
      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2019-11-18
      相关资源
      最近更新 更多