Я работал над хранимой процедурой, чтобы обновить поле заказа в таблице продуктов. Это работает только проблема теперь последний элемент в цикле (cur), увеличивается дважды вместо одного раза (так dubbeled). Нравится так:Порядок заказа SQL и порядок хранения хранимых процедур
+-----------------+ |product + order | |_id | | | | | | 1 | 0 | | 2 | 1 | | etc.. | etc..| | 36 | 35 | | 37 | 36 | | 38 | 38 | | | +-----------------+
Я не могу понять почему. Таблица ссылка (CategoryProduct) в этом случае идет до 38 с category_id 2 CALL curorder(2);
хранимая процедура:
DELIMITER //
CREATE PROCEDURE curorder(
IN catid INT
)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE i INT DEFAULT 0;
DECLARE p INT;
DECLARE cur CURSOR FOR SELECT product_id FROM test.CategoryProduct WHERE category_id = catid;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO p;
UPDATE `test`.`Product` SET `order` = i WHERE `Product`.`product_id` =p;
SET i = i + 1;
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
База данных представляет собой базу данных MySQL. Любые предложения по улучшению процедуры всегда приветствуются.
Заранее спасибо.
EDIT:
я уже пытался поставить SET I ЗАЯВЛЕНИЕ под IF ЗАЯВЛЕНИЕ, но без результата.
Спасибо, что работает !! briljant. В следующий раз я пытаюсь отлаживать его с такими запросами;) умное мышление – Jacob