@sergeiy_permyakov

Как создать запрос mysql в цикле?

Подскажите как создать правильный запрос в мускуле?
Сделал такой
INSERT INTO `osn86_jshopping_products_attr` (`product_id`, `price`, `old_price`, `count`, `ean`, `attr_29`)
SELECT
	`product_id` AS `product_id`,
	`product_price` AS `price`,
    `product_old_price` AS `old_price`,
    '10' AS `count`,
     `product_ean` AS `ean`,
     '1099' AS `attr_29`
FROM
	`osn86_jshopping_products`


В итоге он вставляет что нужно, но мне нужно что бы строки шли подряд чтобы полуичличь такие записи для товара 1:
product_id=1 price=100 old_price=150 count=10 ean=123 attr_29 = 1097
следующая строка
product_id=1 price=100 old_price=150 count=11 ean=123 attr_29 = 1098,
третья строка: product_id=1 price=100 old_price=150 count=12 ean=123 attr_29 = 1099
для второго товара
product_id=2 price=100 old_price=150 count=10 ean=123 attr_29 = 1097 следующая строка product_id=2 price=100 old_price=150 count=11 ean=123 attr_29 = 1098, третья строка:product_id=2 price=100 old_price=150 count=12 ean=123 attr_29 = 1099
для третьего товара
product_id=3 price=100 old_price=150 count=10 ean=123 attr_29 = 1097 следующая строка product_id=3 price=100 old_price=150 count=11 ean=123 attr_29 = 1098, третья строка: product_id=3 price=100 old_price=150 count=12 ean=123 attr_29 = 1099
Должно вот так в таблице чтоб подряд
product_id=1 price=100 old_price=150 count=10 ean=123 attr_29 = 1097
product_id=1 price=100 old_price=150 count=11 ean=123 attr_29 = 1098
product_id=1 price=100 old_price=150 count=12 ean=123 attr_29 = 1099
product_id=2 price=100 old_price=150 count=10 ean=123 attr_29 = 1097
product_id=2 price=100 old_price=150 count=11 ean=123 attr_29 = 1098
product_id=2 price=100 old_price=150 count=12 ean=123 attr_29 = 1098
product_id=3 price=100 old_price=150 count=10 ean=123 attr_29 = 1097
product_id=3 price=100 old_price=150 count=11 ean=123 attr_29 = 1098
product_id=3 price=100 old_price=150 count=12 ean=123 attr_29 = 1098
и т.д. как прописать поле count в запросе и attr_29?
если хадкорно прописывать, то соответственно они вставляются в конец таблицы.
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 1
@AlexRas
Для того, чтобы вставить записи в таблицу osn86_jshopping_products_attr в цикле с изменением значения поля count и attr_29, можно воспользоваться циклом FOR в MySQL. Например, такой запрос:

DELIMITER //
CREATE PROCEDURE insert_attr()
BEGIN
  DECLARE i INT DEFAULT 10;
  DECLARE j INT DEFAULT 1097;
  DECLARE max_count INT DEFAULT 12;
  DECLARE max_attr INT DEFAULT 1099;
  DECLARE product_count INT;
  DECLARE product_id INT;
  DECLARE product_price DECIMAL(10,2);
  DECLARE product_old_price DECIMAL(10,2);
  DECLARE product_ean VARCHAR(255);
  
  SELECT MAX(`product_id`) INTO product_id FROM `osn86_jshopping_products`;
  
  WHILE i <= max_count DO
    SET j = 1097;
    WHILE j <= max_attr DO
      SET product_count = i;
      SET product_price = (SELECT `product_price` FROM `osn86_jshopping_products` WHERE `product_id` = product_id);
      SET product_old_price = (SELECT `product_old_price` FROM `osn86_jshopping_products` WHERE `product_id` = product_id);
      SET product_ean = (SELECT `product_ean` FROM `osn86_jshopping_products` WHERE `product_id` = product_id);
      INSERT INTO `osn86_jshopping_products_attr` (`product_id`, `price`, `old_price`, `count`, `ean`, `attr_29`)
      VALUES (product_id, product_price, product_old_price, product_count, product_ean, j);
      SET j = j + 1;
    END WHILE;
    SET i = i + 1;
  END WHILE;
END //
DELIMITER ;

CALL insert_attr();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы