我有一个基本的“属性包”表用于存储属性有关我主表“一卡通”。所以,当我要开始做了卡的一些高级搜索,我可以做这样的事情:

SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE dbo.CardProperty.IdPrp = 3 AND dbo.CardProperty.Value = 'Fiend'
INTERSECT
  SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE (dbo.CardProperty.IdPrp = 10 AND (dbo.CardProperty.Value = 'Wind' OR dbo.CardProperty.Value = 'Fire'))

我需要做的就是这个主意提取到一些类型的存储过程,所以最好我能在属性/值组合的列表通过并获得搜索结果。

最初,这将是一个“严格”的搜索意味着结果必须在查询中的所有元素相匹配,但我也希望有一个“松散”查询,以便它会匹配任何的结果查询。

我不能完全似乎环绕这一个我的头。我以前的这个版本是这样做产生一些大规模的SQL查询了大量和/或它的条款来执行,但我希望做一些事情这个时候多了几分优雅。我该如何去这样做呢?

有帮助吗?

解决方案

在我看来,你有一个 EAV 模型在这里。 如果你使用SQL Server 2005和了,我会建议你使用这个XML数据类型:

http://weblogs.sqlteam.com/mladenp /archive/2006/10/14/14032.aspx

使搜索和东西与内置的XML查询功能变得更加容易。

如果你不能改变你的模型,然后看看这个:

http://weblogs.sqlteam.com/davidm/articles/12117.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top