我知道有很多问题有同样的问题,但我已经经历了这么多答案,但遗憾的是我不理解或可能不满意。
目标 我希望我的产品可以有多个属性,根据他们的组合,他们可以有他们的价格,sku和股票
示例 T-shit产品具有尺寸,颜色和材料属性(选项)
所以我想要这种灵活的结构
颜色:红色,尺寸:M,材质:柔软 - >价格1美元,sku XXX,股票3 颜色:红色,尺寸:L,材质:柔软 - >价格2美元,sku XXX,股票4 颜色:黑色,尺寸:XL,材质:硬 - >价格3美元,sKu XXX,股票4
现在我有以下结构,如果只提供一个属性(选项),那就没关系。但它不适合变化(组合)。
产品表
CREATE TABLE `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`brand_id` int(11) DEFAULT NULL,
`vendor_id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`long_description` longtext COLLATE utf8_unicode_ci NOT NULL,
`short_description` longtext COLLATE utf8_unicode_ci,
`images` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`weight` decimal(8,2) NOT NULL,
`discount` int(11) DEFAULT NULL,
`discount_start` timestamp NULL DEFAULT NULL,
`discount_end` timestamp NULL DEFAULT NULL,
`status` tinyint(4) NOT NULL,
`released_on` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
选项表
CREATE TABLE `options` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Products_Options表
CREATE TABLE `products_options` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`sku` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`option_id` int(11) DEFAULT NULL,
`option_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`unit_price` decimal(8,2) NOT NULL,
`available_stock` int(11) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
因此products_options
表可以按以下方式存储产品
Color: Red -> price $1, sku xxx, stock 3
Size: M -> price $1, sku xxx stock 3
但它并不反映我是否想存储颜色:红色尺寸:m有一个价格和sku和库存
由于
答案 0 :(得分:0)
您应该尝试在产品表中添加price,sku和stock字段。每个唯一产品都具有这些字段中的一个,并且属于产品表。 Please look at the sample db schema.
答案 1 :(得分:0)
您将把产品主要信息和其他信息(大小/颜色)拆分为2个表格。
产品(名称,描述等) - 这适用于所有具有相同规格的产品 - 例如一定范围的袜子......它的"系列&#34 ; - 它不存储任何库存,将其视为空壳。重要的是要注意这里你会区分产品的Womens和Mens版本,并为每个产品创建一个新产品..
ProductsQty :这会列出产品的ID(上图),然后为每个版本添加多行的大小/颜色列 - 如果您说3(尺寸,颜色,重量)例如,你需要3排......(对于非衣服物品更进一步) - 这将是产品的主要规格 - 即中型或大型,或330ml,200w,基本上是什么确定单位的基本尺寸,无论是毫米,毫米,英寸,克,瓦特,伏特......你可以扩展这一点 - 请记住,产品类型将决定两者的分割位置。衣服有颜色和大小,但油箱可能有一升作为主要区别,也可能是一种颜色 - 所以你可以有一个varchar柱,输入任何单位,加仑,英尺,(我使用矩阵1,矩阵2,矩阵3是更通用..)
每种颜色和尺寸都需要一个新行..介质中的蓝色袜子与Small中的蓝色袜子不同。
主要功能差异应该是一个新产品 - 即,如果你有一个类似于另一个型号的扬声器设置,但有说 - 额外的蓝牙,这将是一个新的顶级产品..你必须聪明什么时候到分割尺寸/颜色以及何时创建新产品。您只能在第二个表中存储颜色/大小变化,以供您的示例使用。
把它绑起来:
**示例产品:Mens Sierra Dri羽绒服**
产品表(ID,名称,说明):
221,Mens Sierra DriDown全天候夹克,优质3季夹克bla blaProductsQty (id,prodid,size,color,qty)
998,221,大,蓝色,22
999,221,大,黑色,4
如果您有多个商店,您可以在新表中使用ProductsQty ID,并为每个子商品提供storeid和qty ..
你也可以将sku存储在任一表中 - 如果家族有相同的sku存储在产品中,如果没有 - 将它放在ProductsQty表中..
现在你可以搜索尺寸/颜色/ sku - 希望这有意义..