将数据从一个MySQL表移动到另一个MySQL表

时间:2013-10-27 15:42:46

标签: php mysql database

当用户单击名为delete的按钮时,我试图将数据从一个数据库(注册)移动到另一个数据库。 (我想将数据移动到名为archived的表中)

以下是我尝试过的内容(来自Google):

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

这不会动摇它......任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

首先,你缺少一个括号,在这种情况下你根本不需要使用这个括号

将查询字符串更改为

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 演示

答案 1 :(得分:0)

您尝试的查询只是将信息从一个表复制到另一个表。然后,您必须从第一个表中删除它:

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

DELETE FROM registrations WHERE id = $id;

答案 2 :(得分:0)

我们可以通过使用loop来实现。这是一个例子:

<?php
        if (isset($_POST['move'])) {

            $userid = $_POST["user_id"];
            $sql = " INSERT INTO `teachers_archive` SELECT * FROM `teachers` WHERE user_id='$userid'";

            if ($conn->query($sql) === TRUE) {
                $query = "DELETE FROM `teachers` WHERE user_id='$userid' ";
                if ($conn->query($query) === TRUE) {
                    $message = "Success!";
                    echo "<script type='text/javascript'>alert('$message');</script>";
                    echo"<script>document.location='mt.php';</script>";
                } else {
                    echo "Error: " . $query . "<br>" . $conn->error;
                }
            } else {
                echo "Error: " . $sql . "<br>" . $conn->error;
            }
        }
        ?>