1. 定义商品多规格SKU
在电商系统中,商品的规格是不可避免的问题。在之前的电商系统中,通常会为每个商品创建一个统一的SKU(Stock Keeping Units)。但是,这种方式会占用更多的存储空间,另外,当商品拥有多种不同的规格时,会变得非常麻烦。因此,我们需要一种更好地管理商品规格的方法,即多规格SKU。
多规格SKU系统可以有效地管理商品规格,使得每个商品只对应一个SKU,同时支持多个规格。例如,一件衣服可以有大小、颜色等规格,每个规格可以对应不同的价格和库存数量。
2. 构建商品规格属性表
在构建多规格SKU系统之前,我们需要先定义商品规格属性。商品规格属性可以包括颜色、尺寸、材料等,不同的规格属性之间可以相互组合,构成一个完整的SKU。
为了实现多规格SKU系统,我们需要构建一个商品规格属性表。该表用于存储每一个规格属性的名称和值。下面是一个示例表结构:
CREATE TABLE `product_attr` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`value` varchar(64) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
该表包含三个字段:
id:商品规格属性ID
name:规格属性名称,例如“颜色”、“尺寸”等
value:规格属性值,例如“红色”、“XL”等
3. 构建商品SKU表
在构建商品SKU表时,我们需要考虑到每个商品可以有多个规格属性,因此需要支持动态属性。我们可以使用一张表来存储每个商品的SKU信息,其中每条记录代表一个SKU。
下面是一个示例的商品SKU表结构:
CREATE TABLE `product_sku` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
`quantity` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_product_id` (`product_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
该表包含四个字段:
id:SKU ID
product_id:商品ID,用于关联商品信息
price:SKU价格
quantity:SKU库存数量
4. 构建商品SKU属性表
商品SKU属性表用于存储每个SKU所对应的规格属性。例如,一条记录可以代表一个商品,选择红色、L码的SKU。
下面是一个示例的商品SKU属性表结构:
CREATE TABLE `product_sku_attr` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`sku_id` int(11) NOT NULL,
`attr_id` int(11) NOT NULL,
`attr_value` varchar(64) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_sku_id` (`sku_id`) USING BTREE,
KEY `idx_attr_id` (`attr_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
该表包含四个字段:
id:SKU属性ID
sku_id:SKU ID,用于关联SKU信息
attr_id:属性ID,用于关联商品属性表
attr_value:属性值,用于表示当前SKU对应的属性值
5. 如何实现商品多规格SKU系统
实现商品多规格SKU系统,我们可以通过下面三个步骤:
创建商品规格属性,添加对应的属性值
为每个商品添加对应的SKU,并设置SKU价格和库存
将每个SKU与商品规格属性进行关联
5.1 创建商品规格属性
对于每个商品规格属性,我们需要在商品规格属性表中添加一个对应的记录。例如,对于衣服的颜色规格,我们可以添加一个“颜色”属性,在该属性下面添加“红色”、“蓝色”等不同的颜色属性值。
下面是一个添加商品规格属性的示例代码:
<?php
// 添加颜色属性
$attrId = addProductAttr("颜色");
// 添加颜色属性值
addProductAttrValue($attrId, "红色");
addProductAttrValue($attrId, "蓝色");
// 添加尺码属性
$attrId = addProductAttr("尺码");
// 添加尺码属性值
addProductAttrValue($attrId, "S");
addProductAttrValue($attrId, "M");
addProductAttrValue($attrId, "L");
?>
5.2 创建商品SKU
对于每个商品,我们需要创建对应的SKU。SKU包含商品价格、库存和规格属性等信息。
下面是一个创建商品SKU的示例代码:
<?php
// 创建一件衣服
$productId = addProduct("衣服", 100.00, 100);
// 创建商品SKU
$skuId = addProductSku($productId, 50.00, 50);
// 为SKU添加规格属性
addProductSkuAttrValue($skuId, "颜色", "红色");
addProductSkuAttrValue($skuId, "尺码", "M");
?>
5.3 关联SKU属性
最后一步是将每个SKU与商品规格属性进行关联。我们可以在商品SKU属性表中添加一条记录,表示当前SKU对应的规格属性值。
下面是一个关联SKU属性的示例代码:
<?php
// 创建商品SKU属性关联
addProductSkuAttr($skuId, $attrId, $attrValue);
?>
6. 如何获取商品SKU信息
获取商品SKU信息的方法与普通商品相同。对于每个商品,我们可以通过查询商品SKU表获取该商品的所有SKU。同时,我们也可以查询商品SKU属性表,获取所有SKU对应的规格属性。
下面是一个获取商品SKU信息的示例代码:
<?php
// 查询商品对应的SKU
$skus = getProductSku($productId);
// 查询SKU对应的规格属性
foreach ($skus as $sku) {
$attrs = getProductSkuAttr($sku['id']);
foreach ($attrs as $attr) {
// 输出SKU规格属性
echo "{$attr['name']}: {$attr['value']} ";
}
// 输出SKU价格和库存
echo "价格: {$sku['price']}, 库存: {$sku['quantity']}";
}
?>
7. 总结
本文介绍了如何在PHP中构建商品多规格SKU系统。我们首先定义了商品规格属性表和商品SKU表,然后关联每个SKU与规格属性。最后,我们介绍了如何查找商品SKU信息。
多规格SKU系统可以有效地管理商品规格,使得每个商品只对应一个SKU,同时支持多个规格。这种方法可以提高系统的效率,并节省存储空间。