MYSQL n 元素矩阵

Posted

技术标签:

【中文标题】MYSQL n 元素矩阵【英文标题】:MYSQL n elements matrix 【发布时间】:2016-06-08 14:07:26 【问题描述】:

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

表示产品可以有:

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

所以管理员有一个矩阵:

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

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

所以矩阵是:

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:)

全部在数据库中,没有硬编码。

我想到了三个表:

属性(颜色、尺寸、价格等) 带有 id 和 name 列 参数(带有属性值,例如黑色、小号等) 带有属性 id 和 value

最后是组合表

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`)
)

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

Combination_id 尺寸颜色形状价格

这样的例子我只需要查询size=small AND color=black就可以得到黑色小商品的价格。

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

提前感谢您的任何想法。

【问题讨论】:

最多可以组合多少个参数? 不确定我是否在关注,这种类型的查询是否有帮助:((size=small AND color=black) OR (size=large AND color=white))? 问题是可以有 n 个参数 - 管理员可以添加多少个参数。 @AlonEitan - 小尺寸和黑色的组合在组合表中如下所示id combinationId attribute parameter 1 1 1 (id for size from attributes table) 3(id of black in parameteres) 2 1 2 15 3 1 7 (id for price) 20 所以它是一个组合 id=1 的组合,它包含与属性一样多的行 查看我添加的EAV标签;看看其他类似的讨论。 【参考方案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;

【讨论】:

以上是关于MYSQL n 元素矩阵的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 生成n阶对称矩阵,其中主对角线元素为0,其他元素为0或1

模板矩阵快速幂

编程实现:输入一个 n*n 的矩阵,求出两条对角线元素值之和。

三角矩阵的压缩存储

在python中,怎么给矩阵删除一个元素?

matlab中怎么定义一个5*6的矩阵,矩阵元素全为c?