【问题标题】:Move data from one MySQL table to another将数据从一个 MySQL 表移动到另一个
【发布时间】:2018-05-21 10:28:34
【问题描述】:

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

这是我尝试过的(从谷歌找到的):

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

这不会动它...有人可以帮忙吗?

【问题讨论】:

标签: php mysql database


【解决方案1】:

首先,您缺少一个括号,在这种情况下您根本不必使用它

将您的查询字符串更改为

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

【讨论】:

  • @peterm 不应该是WHERE id='$id' " 吗?
  • @Fred-ii- 不,不应该。 _id 是一个过程参数。 $id 可能在 $result = mysql_query("CALL move_to_archive($id)"); 中使用,但最好使用带有 mysqli 的参数化查询。
  • @peterm 我明白了,但是我已经见过很多次了,以至于人们没有将变量用引号括起来并且不起作用。
  • @peterm 我指的不是WHERE id = _id; 我指的是Insert Into archived select * from registrations WHERE id=$id
  • 请使用 TRANSACTION!加一个
【解决方案2】:

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

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

DELETE FROM registrations WHERE id = $id;

【讨论】:

  • 我已经运行了这段代码,它已经从注册表中删除了,但没有将它移到存档的表中?
【解决方案3】:

我们可以通过使用循环来做到这一点。这是一个例子:

<?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;
            }
        }
        ?>

【讨论】:

猜你喜欢
  • 2013-10-18
  • 2012-04-07
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多