4

ユーザーが削除という名前のボタンをクリックすると、あるデータベース (登録) から別のデータベースにデータを移動しようとしています。(データを archived という名前のテーブルに移動したい)

これが私が試したことです(Googleから見つけました):

 $result=mysql_query("Insert Into archived (select * from registrations WHERE id=$id") ;
 $row = mysql_fetch_array($result);

これでは動きません... 誰か助けてくれませんか?

4

3 に答える 3

6

まず、括弧が 1 つありません。この場合はまったく使用する必要はありません。

クエリ文字列を次のように変更します

Insert Into archived (select * from registrations WHERE id=$id)
                     ^                                        ^

または単に

Insert Into archived select * from registrations WHERE id=$id

これがSQLFiddleのデモです

次にINSERT、結果セットを返さないため、使用しないでくださいmysql_fetch_array()

第 3 に、データをコピーするだけでなく移動することが目的である場合は、後でコピーした行も削除する必要があります。


これで、すべてをストアド プロシージャに入れることができます

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のデモです

于 2013-10-27T15:54:54.390 に答える
1

試行しているクエリは、あるテーブルから別のテーブルに情報をコピーするだけです。次に、最初のテーブルから削除する必要があります。

INSERT INTO archived 
SELECT * FROM registrations WHERE id = $id;

DELETE FROM registrations WHERE id = $id;
于 2013-10-27T15:55:48.367 に答える