今天我们讲一下商品属性
我们知道,不同类别的商品属性是不同的。
比如图书和男装
图书:作者、出版社、出版时间、ISBN、开本
男装:工艺(图案或颜色)、风格、材质等
所以我们首先要建立一个商品分类属性表prod_class_attr
DROP TABLE IF EXISTS `prod_class_attr`;
CREATE TABLE `prod_class_attr` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`attr_name` varchar(100) DEFAULT NULL COMMENT '属性名称',
`attr_note` varchar(100) DEFAULT NULL COMMENT '属性备注',
`attr_pid` int(11) DEFAULT '0' COMMENT '属性父 id',
`prod_classid` int(11) DEFAULT NULL COMMENT '商品分类id',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;
INSERT INTO `prod_class_attr` VALUES ('1', 'press', '出版社', '0', '1'), ('2', 'author', '作者', '0', '1'), ('3', 'format', '开本', '0', '1'), ('4', 'pressdate', '出版时间', '0', '1'), ('5', 'technics', '工艺', '0', '2'), ('6', 'style', '风格', '0', '2'), ('7', 'target', '适用对象', '0', '2'), ('8', 'material', '材质', '0', '2');
所以接下来要建一个商品属性对应表
prod_id 商品id
attr_id 属性id
attr_value 属性值
注意,在表单中并不是所有用户都会填全属性
CREATE TABLE `prod_attr` (
`prod_id` int(11) NOT NULL,
`attr_id` int(11) NOT NULL,
`attr_value` varchar(100) DEFAULT NULL,
PRIMARY KEY (`prod_id`,`attr_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
新增商品流程
1、第一步,往商品主表插入数据
2、并获取自增的商品ID
3、批量插入商品属性(怎么插入)
先看一个SQL
SELECT 1 AS attr_id, '中信出版社' AS attr_value UNION SELECT 2 AS attr_id, '刘勇' AS attr_value;
这样是为了批量插入到prod_attr
表
下面,我们要把这条SQL放到存储过程中,并且需要动态执行。
这就是一个新建商品的mysql存储过程,商品的属性是在得到商品id之后,根据传入的一个sql字符串,再拼凑成一条插入到表prod_attr
的SQL完成的。
BEGIN
SET @pid=0;
INSERT INTO prod_main(prod_name,prod_classid) VALUES (_prod_name,_class_id);
SET @pid=LAST_INSERT_ID();
#SET @ss='INSERT INTO prod_attr SELECT ? AS prod_id, a.* FROM (SELECT 1 AS attr_id, \'中信出版社\' AS attr_value UNION SELECT 2 AS attr_id, \'刘勇\' AS attr_value) a';
SET @ss=CONCAT('INSERT INTO prod_attr SELECT ? AS prod_id, a.* FROM (',_attr_sql,') a');
PREPARE pname FROM @ss;
EXECUTE pname USING @pid;
DEALLOCATE PREPARE pname;
END
来执行这个sp_new_prod
存储过程:
CALL sp_new_prod('java从入门到精通',1,'SELECT 1 AS attr_id, \'中信出版社\' AS attr_value UNION SELECT 2 AS attr_id, \'刘勇\' AS attr_value');
这样就完成了既插入了prod_mian
商品主表,也插入了prod_attr
商品属性表。