Я пытаюсь добавить записи в свои таблицы customization_field prestashop, по одной для каждого из наших продуктов. Я написал эту команду:

CREATE PROCEDURE test5 () BEGIN 
DECLARE a INT;
SET a = 1461;
WHILE (a <= 3185) DO insert into ps7h_customization_field values (DEFAULT, `a`, `1`, `0`, `0`, `0`, `0`);
SELECT a = a + 1;
END WHILE;
END;

1461 - идентификатор первого продукта, 3185 - идентификатор последнего. Структура таблицы:

id_customization_field int(10) AUTO_INCREMENT
id_product int(10)
type tinyint(1)
required tinyint(1)
is_module tinyint(1)
is_deleted tinyint(1)
tshirtecommerce tinyint(1)

Мне нужна строка для каждого продукта с product_id от 1461 до 3185, каждый с новым номером id_customization_field. Команда выполняется, но возвращает 0 результатов. Что я делаю неправильно?

-1
vipmysqltest 14 Янв 2021 в 12:31

3 ответа

Лучший ответ
drop table if exists t;
create table t
(id int auto_increment primary key,col1 varchar(1),col2 varchar(1),col3 varchar(1),col4 varchar(1),col5 varchar(1),col6 varchar(1));

drop procedure if exists p;
delimiter $$
CREATE PROCEDURE p() 
BEGIN 
DECLARE a INT;
SET a = 5;
WHILE a <= 5 DO 
    insert into t values (null, 'a', '1', '0', '0', '0', '0');
    set a = a + 1;
END WHILE;
END $$
delimiter ;

call p();

select * from t;

+----+------+------+------+------+------+------+
| id | col1 | col2 | col3 | col4 | col5 | col6 |
+----+------+------+------+------+------+------+
|  1 | a    | 1    | 0    | 0    | 0    | 0    |
+----+------+------+------+------+------+------+
1 row in set (0.001 sec)

NB протестировано в heidisql.

0
P.Salmon 14 Янв 2021 в 10:58

SELECT должен быть SET, и вам не нужен DEFAULT, если это AutoIncrement и обратные кавычки не требуются для числовых значений, вам и не нужно их окружать a, но это не повредит.

CREATE PROCEDURE test5 () 
BEGIN 
    DECLARE a INT;
    SET a = 1461;
    WHILE (a <= 3185) 
        DO insert into ps7h_customization_field values (`a`, 1, 0, 0, 0, 0);
        SET a = a + 1;
    END WHILE;
END;
0
RiggsFolly 14 Янв 2021 в 09:54

Не используйте обратные кавычки, не присваивайте значение столбцу с автоинкрементом и не присваивайте правильное значение столбцам (значение a с обратными кавычками - это не int, а имя столбца)

insert into ps7h_customization_field
          ( id_product, type, required,is_module,is_deleted,tshirtecommerce)  
 values (a, 1, 0, 0, 0, 0)
0
scaisEdge 14 Янв 2021 в 10:20
65716449