Как вставить несколько строк в таблице, используя параметр процедуры магазина в MySQL

0

У меня есть три таблицы продукта, размеры и 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

Теги:

2 ответа

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 ;

Эта процедура принимает идентификатор одного продукта и "массив" идентификатора размера (в виде строки с разделителями-запятыми) и вставляет все размеры для продукта в один вызов процедуры:

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 ;
  • 0
    Как передать массив в параметре, чтобы я мог вставить более одного размера одновременно
  • 0
    Смотрите пересмотренный ответ выше. Пожалуйста, не забудьте пометить как ответ. Спасибо!
0

Если вы хотите, чтобы все размеры были прикреплены к продукту на вставке, тогда простое

insert into product_size(product_id,size_id)
    select inprodid,name
    from size
    ;

Сделаю. Но если вам нужны только некоторые размеры, вы можете передать размеры в виде строки с разделителями, разделив их в процедуре в цикле, которая будет содержать инструкцию insert. Вы найдете примеры того, как разделить строки, если вы используете mysql split string.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню