MYSQL n元素矩阵

时间:2016-06-08 14:07:26

标签: php mysql sql performance matrix

我正在使用价格计算器创建系统,具体取决于具有n个可能值的n个参数。

这意味着产品可以拥有:

  • 颜色:黑色或白色
  • 尺寸:大或小

所以管理员有一个矩阵:

if (!pollsResponse.isSuccessful()) 
    throw new IOException("Unexpected reply " + pollsResponse);

但他应该能够在矩阵中添加新的维度,比方说:框架圆形或方形。

因此矩阵将是:

color size price
black small 10
black large 20
white small 15
white large 30
and so on.

全部在数据库中,而不是硬编码。

我开始想到三张桌子:

  • 属性(颜色,大小,价格等) id和name列
  • 参数(带属性值,例如黑色,小等) 具有属性id和值

最后是组合表

black small square 10
black small round 50
black large square 20
black large round
white small square 15
white small round 30
And so on:)

我需要的是找到找到特定组合价格的解决方案,就像具有固定数量的属性一样,例如:

Combination_id尺寸颜色形状价格

通过这样的示例,我只查询CREATE TABLE IF NOT EXISTS `combination` ( `id` int(11) NOT NULL AUTO_INCREMENT, `combination_id` int(11) NOT NULL, `attr_id` int(11) NOT NULL, `parameteres_id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `attr_id` (`attr_id`), KEY `parameteres_id` (`parameteres_id`) ) 以获得黑色小产品的价格。

有没有人知道如何做到这一点,或者如何在应用程序端(PHP)有效地实现它? 或者或许更好的想法如何用n个元素解决上述问题?

提前感谢您的任何想法。

1 个答案:

答案 0 :(得分:1)

使用结构化文本方法可能最好地解决此问题。对于每个产品规格都有一个记录,包括“规格”列和价格列(以及您需要的任何其他列,如零件号,重量,包装成本,倾斜数,序列号等)。规范可以填充结构化的“描述”,例如

;BLACK;LARGE;ROUND;

您需要确保正确选择的条件然后被提供给查询检索数据,但它可能看起来像这样: -

SELECT Price FROM Products WHERE Specification LIKE '%;BLACK;%' AND Specification LIKE '%;LARGE;%' AND Specification LIKE '%;ROUND;%'

请注意,规范有一个初始的分号以及每个属性后面的一个 - 这样每个比较表达式只需要以通配符和分号开头,并以分号和外卡结尾。这意味着您可以按任何顺序指定任何条件,只要您一致地使用这些条款就没有关系,并且您不需要为可能适用或不适用的所有可能的规范类型提供许多不同的表。每个产品。它还允许省略不可能的规范组合而没有复杂性,例如,你很可能有; NAVYBLUE; WOOL; SOCKS; 但你不太可能有; GREEN; STEEL; SOCKS;