什么是商品多规格SKU功能
在电商网站中,商品不仅有一个单一属性,还可能存在多种特性,如不同颜色、不同尺寸等。这时候我们就需要使用商品多规格SKU功能。SKU是Stock Keeping Unit的缩写,中文意思为库存量单位,是商品管理系统中不可缺少的部分,其实就是给每一个商品设置一个标识。当商品拥有多种规格时,通过SKU来区分不同规格以及不同价格,方便用户在前台页面选择自己需要的商品规格。
实现商品多规格SKU功能的必要性
实现商品多规格SKU功能可以给用户提供更好的购物体验,如用户可以更方便地在页面上选择不同的SKU商品规格,避免到最后出现不符合预期的情况。并且在后台管理方面,我们可以更方便地对商品进行库存管理、价格管理等。
如何使用PHP编程语言创建商品多规格SKU功能
一、创建商品表以及规格表
首先我们需要创建两个表:商品表和规格表,这两个表的结构可以按照以下方式创建:
CREATE TABLE `goods` (
`goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`goods_name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',
`goods_sn` varchar(60) NOT NULL DEFAULT '' COMMENT '商品编码',
`shop_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '销售价格',
`market_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '市场价格',
`goods_number` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '库存',
`goods_thumb` varchar(255) NOT NULL DEFAULT '',
`goods_desc` text NOT NULL COMMENT '商品描述',
`is_on_sale` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否上架,1表示上架,0表示下架',
`sort_order` smallint(4) unsigned NOT NULL DEFAULT '50',
`add_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',
PRIMARY KEY (`goods_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品表';
CREATE TABLE `goods_spec` (
`spec_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格ID',
`spec_name` varchar(60) NOT NULL DEFAULT '' COMMENT '规格名称',
PRIMARY KEY (`spec_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='规格表';
二、创建商品规格值表和SKU表
接下来我们需要再创建两个表:商品规格值表和SKU表,这两个表的结构可以按照以下方式创建:
CREATE TABLE `goods_spec_value` (
`spec_value_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格值ID',
`spec_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '规格ID',
`spec_value` varchar(60) NOT NULL DEFAULT '' COMMENT '规格值',
PRIMARY KEY (`spec_value_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品规格值表';
CREATE TABLE `goods_sku` (
`sku_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'SKU ID',
`goods_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品ID',
`spec_name` varchar(60) NOT NULL DEFAULT '' COMMENT '规格名称',
`spec_value` varchar(60) NOT NULL DEFAULT '' COMMENT '规格值',
`sku_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '销售价格',
`sku_number` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '库存',
PRIMARY KEY (`sku_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='SKU表';
三、创建商品页面
我们可以在商品添加页面中添加一个可以选择多规格SKU的功能,代码如下:
<form action="add_goods.php" method="post">
<input type="text" name="goods_name" placeholder="商品名称">
<input type="number" name="shop_price" placeholder="销售价格">
<textarea name="goods_desc" placeholder="商品描述"></textarea>
<h3>商品规格</h3>
<table>
<thead>
<tr>
<th>规格名称</th>
<th>规格值</th>
</tr>
</thead>
<tbody id="goods_spec_table">
<tr>
<td><input type="text" name="spec_name[]" placeholder="规格名称"></td>
<td><input type="text" name="spec_value[]" placeholder="规格值"></td>
</tr>
</tbody>
</table>
<button type="button" onclick="add_spec_item()">添加规格项</button>
<input type="submit" value="添加商品">
</form>
<script>
function add_spec_item() {
var html = '<tr><td><input type="text" name="spec_name[]" placeholder="规格名称"></td>'+
'<td><input type="text" name="spec_value[]" placeholder="规格值"></td></tr>';
$("#goods_spec_table").append(html);
}
</script>
四、添加商品信息
在接收到商品数据后,我们需要对商品进行添加操作,具体操作步骤如下:
先添加商品基本信息到商品表中。
再取出规格名称和规格值,先将规格名称插入到规格表中,并返回规格ID。
再将规格值插入到商品规格值表中,一个规格值对应一个规格ID,用于后面的查询。
最后根据不同规格的组合来生成SKU并插入到SKU表中。
代码如下:
<?php
//接收数据
$goods_name = $_POST['goods_name'];
$shop_price = $_POST['shop_price'];
$goods_desc = $_POST['goods_desc'];
$spec_name = $_POST['spec_name'];
$spec_value = $_POST['spec_value'];
//先添加商品信息到商品表中
$sql = "INSERT INTO `goods`(`goods_name`, `shop_price`, `goods_desc`) VALUES ('$goods_name', '$shop_price', '$goods_desc')";
$res = mysqli_query($link, $sql);
$goods_id = mysqli_insert_id($link);
//遍历规格
foreach($spec_name as $k=>$v) {
$sql = "SELECT `spec_id` FROM `goods_spec` WHERE `spec_name`='$v'";
$res = mysqli_query($link, $sql);
$row = mysqli_fetch_assoc($res);
//如果规格名称不存在,则插入到规格表中
if(!$row) {
$sql = "INSERT INTO `goods_spec`(`spec_name`) VALUES ('$v')";
mysqli_query($link, $sql);
$spec_id = mysqli_insert_id($link);
} else {
$spec_id = $row['spec_id'];
}
//插入规格值到商品规格值表中
$sql = "INSERT INTO `goods_spec_value`(`spec_id`, `spec_value`) VALUES ('$spec_id', '$spec_value[$k]')";
mysqli_query($link, $sql);
}
//获取所有规格值
$sql = "SELECT `spec_value_id` FROM `goods_spec_value` WHERE `spec_id`='$spec_id'";
$res = mysqli_query($link, $sql);
while($row = mysqli_fetch_assoc($res)) {
$spec_value_id[] = $row['spec_value_id'];
}
//根据不同规格的组合来生成SKU并插入到SKU表中
foreach($spec_value_id as $k1=>$v1) {
foreach($spec_value_id as $k2=>$v2) {
if($v1 != $v2) {
$spec_value_str1 = $spec_value_id[$k1].":".$spec_value[$k1];
$spec_value_str2 = $spec_value_id[$k2].":".$spec_value[$k2];
$sku_value = $spec_value_str1.",".$spec_value_str2;
$sku_price = $shop_price + 10 * ($k1 + $k2); //价格自定义,这里只是举个例子
$sql = "INSERT INTO `goods_sku`(`goods_id`, `spec_name`, `spec_value`, `sku_price`, `sku_number`) VALUES ('$goods_id', '$spec_name[$k1], $spec_name[$k2]', '$sku_value', '$sku_price', '100')";
mysqli_query($link, $sql);
}
}
}
?>
总结
实现商品多规格SKU功能可以为用户提供更好的购物体验,并且可以更方便地对商品进行管理和控制,提高网站的效率和用户满意度。