我正在创建带有价格计算器的系统,该系统取决于具有 n 个可能值的 n 个参数。
这意味着产品可以有:
- 颜色:黑色或白色
- 尺寸:大或小
所以 admin 有一个矩阵:
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 和值
最后是组合表
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 color shape price
在这样的例子中,我只查询 size=small AND color=black
以获得黑色小产品的价格。
有没有人知道如何做到这一点或如何在应用程序端 (PHP) 有效地实现它? 或者也许有更好的想法如何解决上述 n 个元素的问题?
提前感谢您的任何想法。
最佳答案
这个问题最好用结构化文本方法来解决。对于每个产品规范,都有一个记录,包括“规范”列和价格列(以及您需要的任何其他列,如零件号、重量、包装成本、倾斜号、序列号等)。规范可以用结构化的“描述”填充,例如
;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;
关于php - MYSQL n个元素矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704870/