我有三个表product,sizes和product_size
product
> id
> name
product_size
> product_id FK
> size_id FK
size
> id
> name
知道使用存储过程,我想插入具有多个大小的单个产品 例如。
product.id =1;
product.name = xyz;
{
product_size.product_id = 1
product_size.size_id = 1
product_size.product_id = 1
product_size.size_id = 2
product_size.product_id = 1
product_size.size_id = 3
}
那么如何传递大小参数以在mysql中存储过程
答案 0 :(得分:0)
以下是一个存储过程,每次调用该过程时,都会在product_size中插入一条记录。该过程接受product.id和size.id的输入参数。
DELIMITER //
CREATE PROCEDURE INSERT_product_size(
IN productID int,
IN sizeID int
)
BEGIN
INSERT INTO
product_size
(product_id, size_id)
VALUES
(productID, sizeID);
END //
DELIMITER ;
此过程采用一个产品ID和一个大小为ID的“数组”(以逗号分隔的字符串形式),并在一个过程调用中插入该产品的所有大小:
DROP PROCEDURE IF EXISTS INSERT_product_sizes;
DELIMITER //
CREATE PROCEDURE IF NOT EXISTS INSERT_product_sizes(
IN productID int,
IN sizeIDs varchar(100)
)
BEGIN
DECLARE delimiterCount int;
DECLARE sizeID int;
DECLARE loopCount int;
/* Remove spaces, if any, from input string */
SET sizeIDs = REPLACE(sizeIDs, ' ', '');
/* Determine how many commas are in input string */
SET delimiterCount = LENGTH(sizeIDs) - LENGTH(REPLACE(sizeIDs, ',', ''));
SET loopCount = 1;
/* For each id in input string */
WHILE loopCount <= delimiterCount + 1 DO
SET sizeID = SUBSTRING_INDEX(sizeIDs, ',', 1);
INSERT INTO
product_size
(product_id, size_id)
VALUES
(productID, sizeID);
/* Remove last used id from input string */
SET sizeIDs = REPLACE(sizeIDs, CONCAT(sizeID, ','), '');
SET loopCount = loopCount + 1;
END WHILE;
END //
DELIMITER ;
答案 1 :(得分:0)
如果您希望将所有尺寸的商品都附在插入物上,那么简单的
insert into product_size(product_id,size_id)
select inprodid,name
from size
;
可以。 但是,如果您只需要一些大小,则可以将大小作为定界字符串传递,在过程中将它们拆分为一个循环,该循环将包含一个插入语句。如果您使用google mysql拆分字符串,则将找到有关拆分字符串的示例。