2016-02-27 41 views
1

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

enter image description here

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

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

我只需要一些暗示要学什么。

我的应用程序运行在MVC 5和db我正在使用SQL Server。

谢谢你的帮助。

回答

2

所以实现你的优先级算法排序顺序:

... 
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 - 优化不同条件下的搜索(执行计划)。

+0

这可以工作,但它也返回不匹配的项目。不知道如何在这里使用“where”关键字 – tonco

+0

更新了答案。 –

+0

巨型 - 它的作品 - 谢谢你。你能否再多帮我一次标点符号?在“WHERE”子句中,我使用“LIKE”而不是“=”.... WHERE(@firstName是NULL或t.FirstName像@firstName) 列FirstName中的一行包含单词“Ján ”。 “喜欢”与小写字母“j”正常工作。但是“á”是问题,如果我尝试搜索例如“ja%”它不起作用。你有任何提示如何解决它? thx – tonco