在电商平台上,商品的规格有时不仅仅是一个,有些商品的规格会相当复杂,不同规格会影响到商品的价格、库存、甚至是展示内容。那么如何使用PHP实现商品的多规格SKU功能呢?本篇文章将详细介绍如何实现。
1. 什么是SKU?
SKU是一种库存管理方式,全称为“Stock Keeping Unit”,也被称作“库存量单位”,是指商品管理的最小单位。在电商平台上,常常用SKU来表示商品的不同属性和规格,包括大小、颜色、材质等信息。
例如,一个T恤可以有各种不同的SKU,比如:
- 男款、女款、儿童款
- 不同的颜色:红、黄、蓝、绿等
- 不同的尺码:S、M、L、XL等
- 不同的材质:棉、麻、合成纤维等
每种款式、颜色、尺码和材质组合起来就是一个唯一的SKU。
2. 商品属性表设计
为了实现商品的多规格SKU功能,我们首先需要在数据库中设计一个属性表,用来存储所有的商品属性和规格。属性表至少需要包含以下字段:
- 属性ID:属性的唯一标识符,主键
- 属性名称:属性的名称,如“颜色”、“尺码”、“材质”等
- 属性值列表:属性值的列表,如“红、黄、蓝、绿”、“S、M、L、XL”、“棉、麻、合成纤维”等
可以使用以下的SQL语句创建属性表:
CREATE TABLE `attribute` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '属性名称',
`value_list` text NOT NULL COMMENT '属性值列表,JSON 格式',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品属性表';
其中,`value_list`字段使用JSON格式存储属性值的列表,方便后续的处理。
3. 商品SKU表设计
除了属性表之外,我们还需要设计一个SKU表,用来存储所有的商品SKU信息,包括SKU的唯一标识符、对应的属性值、价格、库存等。SKU表需要至少包含以下字段:
- SKU ID:SKU的唯一标识符,主键
- 商品ID:商品的唯一标识符
- 属性值ID列表:对应属性值的ID列表,如“颜色-红、尺码-S、材质-棉”的ID列表
- 价格:SKU的价格
- 库存:SKU的库存量
可以使用以下的SQL语句创建SKU表:
CREATE TABLE `sku` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品ID',
`attr_value_ids` varchar(255) NOT NULL DEFAULT '' COMMENT '属性值ID列表,以逗号分隔',
`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '价格',
`stock_qty` int(11) NOT NULL DEFAULT '0' COMMENT '库存量',
PRIMARY KEY (`id`),
KEY `product_id` (`product_id`,`attr_value_ids`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品SKU表';
其中,`attr_value_ids`字段存储的是对应属性值的ID列表,以逗号分隔。注意,其中`product_id`和`attr_value_ids`字段都作为索引,方便后续的查询操作。
4. 添加商品
一般来说,在添加商品的时候,我们需要先添加商品的基本信息,比如商品名称、描述、主图等,然后再添加商品的所有SKU信息。在添加SKU的时候,我们需要根据商品的属性表,添加所有可能的属性组合,并为每个属性组合添加对应的价格和库存信息。
下面是一个简单的添加商品的DEMO:
// 添加商品基本信息
$product_id = add_product($name, $desc, ...);
// 获取所有的属性及其对应的属性值
$attributes = get_all_attributes();
// 生成所有可能的属性组合
$skus = generate_all_skus($attributes);
// 添加所有SKU信息
foreach ($skus as $sku) {
add_sku($product_id, $sku);
}
其中,`add_product()`用来添加商品的基本信息,`get_all_attributes()`用来获取所有的属性及其对应的属性值,`generate_all_skus()`用来生成所有可能的属性组合,`add_sku()`用来添加一个SKU的信息。
5. SKU信息查询
在查询SKU信息时,我们需要根据商品ID和对应的属性值来查询SKU的信息。一般来说,我们需要根据商品ID查询所有的对应的SKU信息,然后根据属性值来筛选出需要的SKU信息。
下面是一个根据商品ID和属性值查询SKU信息的DEMO:
// 查询所有对应商品ID的SKU信息
$sql = "SELECT `id`, `attr_value_ids`, `price`, `stock_qty` FROM `sku` WHERE `product_id` = {$product_id}";
$res = mysqli_query($conn, $sql);
// 将结果集转化为数组
$skus = [];
while ($row = mysqli_fetch_assoc($res)) {
$skus[] = $row;
}
// 根据属性值筛选SKU信息
$selected_skus = filter_sku($skus, $selected_attr_values);
其中,`filter_sku()`用来根据属性值筛选SKU信息。
6. SKU信息展示
最后,我们需要将SKU信息展示给用户。一般来说,我们可以将SKU的属性值进行拼接,例如“红色、S码、纯棉”,并在页面上显示SKU的价格、库存等信息。
下面是一个展示SKU信息的DEMO:
foreach ($skus as $sku) {
// 将属性值ID列表转换为对应的属性值名称列表
$attr_value_names = get_attr_value_names($sku['attr_value_ids']);
// 拼接属性值名称,例如“红色、S码、纯棉”
$attr_value_str = implode('、', $attr_value_names);
// 输出SKU信息
echo "
商品SKU:{$attr_value_str}";
echo "
价格:{$sku['price']}元";
echo "
库存:{$sku['stock_qty']}件";
}
其中,`get_attr_value_names()`用来将属性值ID列表转换为对应的属性值名称列表。
至此,PHP实现商品多规格SKU功能的详细步骤就介绍完了,实现起来可能会稍微有些复杂,但只要按照以上的步骤逐一实现,就能够方便地实现一个完善的SKU功能。