如何使用PHP实现商品多规格SKU功能

在电商平台上,商品的规格有时不仅仅是一个,有些商品的规格会相当复杂,不同规格会影响到商品的价格、库存、甚至是展示内容。那么如何使用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功能。

后端开发标签