0

我需要确定我应该为产品列表中的每个产品使用的价目表。用于给定产品的正确价目表由我已经知道的几个产品参数决定。但是,并非所有参数都适用于所有价目表。以下是 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 问题——因为它似乎应该如此。我可以自由地重新设计管理标准的方式,这只是我自己画的角落。设计目标是处理可用于定义价目表标准的许多不同参数。

建议?

4

1 回答 1

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
于 2013-09-15T19:17:19.920 回答