【问题标题】:Custom search in SQL with rank by columnsSQL中的自定义搜索,按列排名
【发布时间】:2016-06-10 18:37:00
【问题描述】:

我想为存储在 SQL Server 中的用户实现智能搜索表单。我要用于搜索的列显示在下面的屏幕截图中。

但有些列的优先级更高。例如,如果电子邮件或电话与数据库中的项目匹配,则它将具有更高的排名,例如按街道和城市创建的项目。

我什至不知道从哪里开始。

我只需要一些提示。

我的应用程序在 MVC 5 下运行,而对于 db,我使用的是 SQL Server。

感谢您的帮助。

【问题讨论】:

    标签: sql sql-server database search full-text-search


    【解决方案1】:

    所以按排序顺序实现您的优先算法:

    ...
    set @email = NullIf(@email, '')
    set @city_id = NullIf(@city_id, 0)
    
    SELECT
    ...
    WHERE (@email is NULL or t.email = @email)
      AND (@city_id is NULL or t.city_id = @city_id)
      AND ...
    ORDER BY
      CASE
        WHEN @email = u.email THEN 1
        WHEN @city_id = t.city_id THEN 2
        ...
      END
    OPTION(RECOMPILE)
    

    recompile - 针对不同条件优化搜索(执行计划)。

    【讨论】:

    • 这可行,但它也会返回不匹配的项目。不知道如何在这里使用“where”关键字
    • Mega - 它有效 - 谢谢。你能再帮我一次标点符号吗?在“WHERE”子句中,我使用“LIKE”而不是“=”...。 WHERE(@firstName 为 NULL 或 t.FirstName Like @firstName)我在 FirstName 列中的一行包含单词“Ján”。 “喜欢”与小写字母“j”一起工作正常。但是如果我尝试搜索例如“ja%”,“á”就是问题所在,它不起作用。你有任何提示如何解决它吗?谢谢
    • 不确定,可能你必须用 % 包围你的变量:set @firstName = '%' + @firstName + '%'
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2013-08-17
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多