如何使用SQL Server为我的ASP.NET网站提供精确搜索

问题描述:

我们正在开发一个使用ASP.NET和sql server的网站。我们希望提供精炼搜索,基本上针对一个或多个特定条件过滤我们的搜索结果。我们要展示的所有细化搜索字段和计数(类似于亚马逊的网站,几个字段显示与计数的搜索结果的左侧)如何使用SQL Server为我的ASP.NET网站提供精确搜索


按价格
50到100(10)
100至500(50)...

通过发送时间
7天内(40)
在15天内(90)
在30天内(150)

依此类推...

我们的正常搜索使用多个搜索条件进行。我们使用SQL Server,存储过程使用分页技术和每页结果数。

所以,当你回答时,请考虑这些信息,并提供一个工作示例链接,如果可以的话。

非常感谢。

+0

您没有提供足够的信息来真正提供“工作示例”。你已经尝试了什么? – 2012-07-06 08:18:22

+0

,因为我没有为我的问题得到确切的解决方案,而且我放弃投票选出我认为有帮助的答案 – 2012-07-07 07:42:23

+0

致Andrew Barber, – 2012-07-07 07:42:45

这只能通过对sql server过程和代码进行小的修改来完成。

保留所有精化元素作为存储过程的变量。 如果price是精炼属性,则将精制参数的值传递给sql服务器,例如: 然后创建2个变量@min_price和@max_price,这些变量将传递给存储过程并包含在分页前语句的哪个位置并进行分类。
编辑:
你的意思是你需要条件参数。 在这种情况下,使用ISNULL() 例如:您希望某个价格范围内的产品和某个类别的产品名称,即手机,电子产品。现在如果这个Category参数为null,那么我们需要避免比较。在这种情况下:

SELECT * 
FROM Products p 
WHERE 
p.Price BETWEEN @min_price AND @max_price 
AND 
p.Category = ISNULL(@category, p.Category) 

现在,在这种情况下发生的事情是,如果@Category参数为null,则它取代范畴本身即移动=移动将返回true的比较。

而且,如果查询要形成太复杂,那么动态sql查询是唯一的出路。但是尽量避免这些因素,这些执行计划不会被保存下来,因此性能会受到影响。

+0

这很有帮助,但我的许多精炼字段都存储为查找表(字符串),所以它不仅仅是一些int值,我们可以使用最小或最大范围 – 2012-07-07 07:38:54

+0

@vs - Brother编辑了我的答案。检查它是否有帮助。 – bhuvin 2012-07-09 06:35:10