Проблем с phpmyadmin и SQL

vitohol

Premium
Имам следния проблем:
Исакам в прозореца на PHPmyadmin за SQL заявки да стартирам следната заявка, която ми дава грешка.

SET @v_current = 4;

WHILE (@v_current <= 789) DO
UPDATE products SET extraInfo=(SELECT extraInfo from products_old WHERE products_old.id=@v_current)
WHERE products.id = @v_current
SET @v_current = @v_current + 1;
END WHILE;

Игрежда че структурата на WHILE цикала не е правилна според phpmyadmin синтакиса.

Идеята ми е от таблицата products_old, полето extrainfo да го копирам в полето extrainfo на products таблицата за всички редове.

Някой да може да ми помогне?
 
От: Проблем с phpmyadmin и SQL

На пръв поглед ми се струва че смесваш SQL с процедурен език. DO и WHILE по принцип няма (всъщност може и да има такова чудо в mysql специално, не съм сигурен).

Пък дори и да е коректно това, виж все пак дали не може да се избегне тая променлива v_current... Някакво числово ID не може да няма из таблицата.
 
От: Проблем с phpmyadmin и SQL

Сигурен ли си че е станало? По принцип в phpmyadmin ако директно paste-неш процедура не бачка, понеже delimiter-а му е ; и не я хваща цялата.

Тоест в долното поле не трябва да пишеш името на процедурата, а да смениш delimiter-а на нещо различно от ;
 
От: Проблем с phpmyadmin и SQL

Код:
UPDATE products p, products_old po
SET p.extraInfo = po.extraInfo
WHERE p.id = po.id

или ако предпочиташ с вложен SELECT но по-бавно:

Код:
UPDATE products p
SET p.extraInfo = (SELECT po.extraInfo FROM products_old po WHERE p.id = po.id)
 
От: Проблем с phpmyadmin и SQL

Така се създава от конзола:

DELIMITER |
DROP PROCEDURE IF EXISTS testProc|
CREATE PROCEDURE testProc()
BEGIN
SET @v_current = 4;
WHILE (@v_current <= 1000) DO
UPDATE products SET extraInfo=(SELECT extraInfo from products_old WHERE products_old.id=@v_current)
WHERE products.id = @v_current
SET @v_current = @v_current + 1;
END WHILE;
END|

За phpMyAdmin само махаш първия ред - "DELIMITER |", а слагаш | в малкото поленце под textarea-та. Ако си на споделен хостинг някъде е напълно възможно и да нямаш права за създаване и викане на процедури.
 

Горе