标识我匹配所有集成员的集合

时间:2013-09-15 18:42:13

标签: mysql sql database

我需要确定我应该在产品列表中为每种产品使用的价目表。用于给定产品的正确价格表由我已知的几个产品参数决定。但是,并非所有参数都适用于所有价格表。以下是3个价格表的“标准”示例:

pricelist_key    param     value
A                size      n1
A                weight    n2
A                color     n4
B                size      n5
B                weight    n6
B                color     n8
B                type      n10
C                weight    n2
C                min_size  n5

要回答的问题是:“由pricelist_key标识的哪一组标准值,我的产品是否满足”?

我确保每组参数值都是唯一的 - 换句话说,每个价格表都有一组唯一的标准和/或值 - 我无法满足多个价格表的所有条件。我事先知道必须建立所有价格表的完整参数集,但任何给定的价格表都可以使用这些参数的任何子集作为其标准。

在程序上,我会遍历产品,遍历价目表,并循环参数。我错过的第一个参数会让我退到下一个价目表,直到找到符合所有条件的产品的一个价目表。下一步是在确定的价格表中查找日期并获得在那里找到的一个价格。

但我正在处理集合(在此上下文中是“价格表标准集”),我想了解如何将其视为一个自然的SQL问题 - 因为它似乎应该是。我可以自由地重新设计标准的管理方式,这只是我自己画的角落。设计目标是处理可用于定义价格表标准的各种参数。

建议?

1 个答案:

答案 0 :(得分:1)

假设我们看到的是一个给定产品的价格表的一部分,你需要找到一个与之前已知的所有标准相匹配的pricelist_key,你可以使用像这样的查询来找到它:

SELECT pricelist_key, count(*) as params_matched FROM pricelist
WHERE product_id = 1
AND 
(    param = 'weight' AND value = 'n6'
  OR param = 'size'   AND value = 'n5'
  OR param = 'color'  AND value = 'n8' )
GROUP BY pricelist_key
HAVING params_matched = 3