Първо пропускате една скоба, която изобщо не трябва да използвате в този случай
Променете низа на заявката си на
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
или просто към
Insert Into archived select * from registrations WHERE id=$id
Ето го SQLFiddle демонстрация
Второ INSERT
не връща набор от резултати, така че не трябва да използвате mysql_fetch_array()
.
Трето, ако намерението ви е било да се преместите не само за да копирате данни, тогава трябва също да изтриете реда, който сте копирали след това.
Сега можете да поставите всичко в съхранена процедура
DELIMITER $$
CREATE PROCEDURE move_to_archive(IN _id INT)
BEGIN
START TRANSACTION;
INSERT INTO archived
SELECT *
FROM registrations
WHERE id = _id;
DELETE
FROM registrations
WHERE id = _id;
COMMIT;
END$$
DELIMITER ;
Примерна употреба:
CALL move_to_archive(2);
Ето го SQLFiddle демонстрация