2011-02-16 32 views
0

我有一个包含约20个产品的列表,每个产品最多有30个可能的属性。我试图找出在表单上使用复选框(表示30个可能的属性)的最佳方式来过滤产品,以便只显示具有匹配属性的产品。我可以使用SQL Server 2005,但似乎这可能是矫枉过正。有什么建议么?带有复选框的ASP.NET筛选结果

(附加)编辑:好的,给定下面的数据结构,如何查询数据库以返回具有所有匹配功能的产品?说产品#1具有功能1,2和3.产品#2具有功能2,3和4.功能1和功能3的查询应返回产品#1,但不返回产品#2。


Products table 
productID int 
productname nvarchar(50) 

Features table 
featureID int 
featurename nvarchar(50) 

FeatureMap table 
featuremapID int 
productID_fk int 
featureID_fk int 
 
+1

是你的产品已经在数据库中?如果是这样,你如何识别每个产品的属性? – 2011-02-16 17:26:22

+0

@ Dillie-O - 我已收到一份纸质清单。这基本上是用于营销目的的功能页面。 – Ethan 2011-02-16 17:27:59

+0

如果你不使用SQL,你用什么来存储你的产品和属性? – Jeff 2011-02-16 18:06:26

回答

2

首先你会收集用户从你的UI中选择属性

List<string> filter = this.GetAttributeFilterFromUI(); 
string featureNamesParam = "(" + string.Join(",", filter) + ")"; 

那么你应该能够使用参数化查询,其SQL会是这样的:

SELECT ProductID FROM Products P 
JOIN FeatureMap FM ON FM.ProductID = P.ProductID 
WHERE FM.featureID_fk IN 
(SELECT FeatureID FROM Features WHERE featurename IN @FeatureNames) 
0

嗨SQL Server未overkilling,你可以用它很容易创建产品表和插入数据。在您告诉我们您为表格创建的模式后,我们可以看到如何处理这个问题。

1

数据库可以正常工作。如果产品的属性是固定的,则可以使用产品ID /名称创建单个表,并且每个属性都将位于名为“IsGreen”,“IsBlue”,“HasWarrant”等的布尔型/位类型的列中。您认为随着时间的推移可能会添加或删除可能存在的问题,您需要设置“属性”,“产品”和“产品属性”表以相应地匹配产品和属性。

然后,您可以将您的ASP.Net网页设置为使用具有所有可用选项的CheckBoxList控件。然后,您可以浏览该列表中的复选框项目列表,以确定哪些值已被选择,并从那里设置数据库查询。

如果您希望对搜索结果采用“动态”方法,请将CheckBoxList的AutoPostBack属性设置为“true”,然后每次选中或取消选中某个复选框时,SelectedIndexChanged都会被触发,您可以更新搜索结果相应。这样用户不必每次都按下“搜索”按钮。