sku 全称为:Stock Keeping Unit,是库存进出计量的基本单元。
我们一般会在电商网站基本都会看到
比如淘宝,JD
淘宝和JD的 方式可能不一样,因为我不清楚他们具体是如何设计的, JD是不同的数据都设计成一个商品.
下面是我的设计思路
mysql 设计,3张表
sku属性表: (编号, 名称)
(1, 颜色)
(2 ,尺码)
sku属性值表: (编号, 属性表键值 ,属性编码, 属性值)
(1, 1 ,1, 黑色)
(2, 1 ,2, 白色)
(3, 2 ,1, S)
(4, 2 ,2, L)
sku表: (编号, 商品编号,属性组合规格 ,价格,数量, 库存,.. (可以自定义运费等) )
(1, 1 ,1|3, 100,1) //黑色 S
(1, 1 ,2|3, 90,1) //白色 S
有多少中组合一次全部添加进去,前台取的时候 直接根据取sku表 商品编号 查询出所有的组合
穿一个自己的demo 效果图
不清楚具体设计的好不好,如果不好请谅解 /(ㄒoㄒ)/~~
附带送上 根据属性获取商品的所有sku属性的组合的方法
/**
* 获取属性的所有组合
* @author GstYon <[email protected]>
*/
private function getArrSet($arrs,$_current_index=-1){ //总数组
static $_total_arr;
//总数组下标计数
static $_total_arr_index;
//输入的数组长度
static $_total_count;
//临时拼凑数组
static $_temp_arr; //进入输入数组的第一层,清空静态数组,并初始化输入数组长度
if($_current_index<0)
{
$_total_arr=array();
$_total_arr_index=0;
$_temp_arr=array();
$_total_count=count($arrs)-1; $this->getArrSet($arrs,0);
}
else
{
//循环第$_current_index层数组
foreach($arrs[$_current_index] as $v)
{ //如果当前的循环的数组少于输入数组长度
if($_current_index<$_total_count)
{
//将当前数组循环出的值放入临时数组
$_temp_arr[$_current_index]=$v;
//继续循环下一个数组
$this->getArrSet($arrs,$_current_index+1); }
//如果当前的循环的数组等于输入数组长度(这个数组就是最后的数组)
else if($_current_index==$_total_count)
{
//将当前数组循环出的值放入临时数组
$_temp_arr[$_current_index]=$v;
//将临时数组加入总数组
$_total_arr[$_total_arr_index]=$_temp_arr;
//总数组下标计数+1
$_total_arr_index++;
} }
} return $_total_arr;
}