【发布时间】: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标签;看看其他类似的讨论。
标签: php mysql sql performance matrix