2012-08-02 59 views
0

我的工作,其跟踪的内容是该领域的系统之前备份列数据(到另一个表/列),更新在它之前。我更愿意使用以前的数据表,但我可以选择其他选项。这是一些示例代码,这将完成该任务:PHP的mysqli - 更新列

<?php 

$initial_value = $_POST['some_value']; 
$id =231212213; // some id 

$stmt = $mysqli->prepare("SELECT column FROM table WHERE user=?") 
$stmt->bindParam("s", $id); 
$stmt->execute(); 
$stmt->bind_result($column); 
$stmt->fetch(); 

if ($column !="") { 
    //edit : it doesnt matter to me whether the data is moved into a new table or column 
    $stmtA = $mysqli->prepare("UPDATE another_table SET backup_column=? WHERE user=?"); 
    $stmtA->bindParam("ss", $column, $id); 
    $stmtA->execute(); 

    $stmtB = $mysqli->prepare("UPDATE table SET column=? WHERE user=?"); 
    $stmtB->bindParam("ss", $initial_value, $id); 
    $stmtB->execute(); 
} 

?> 
+0

为什么不增加一列叫'** previous_val **'? – Matt 2012-08-02 16:05:25

+0

对我而言数据是否会被移动到新的表格或列中并不重要。任何一个都可以工作 – mlishn 2012-08-02 16:06:21

+0

从数据使用的角度来看,添加一列,而不是使用** a)**主键,** b)**外键和** c)**像我说的值 – Matt 2012-08-02 16:09:41

回答

1

这是一个纯粹的MySQL命令的解决方案,你可以修改你的代码,这样做:

1.) CREATE TABLE new_table_name LIKE old_table_name 
2.) INSERT INTO new_table_name SELECT * FROM old_table_name 

完成。 ;-)

这样,你有你的桌子前面的精确备份,并加入是很容易看到的区别:

SELECT a.*, b.* FROM old_table a JOIN new_table b ON a.id=b.id WHERE <criteria>; 

编辑

UPDATE BACKUP SET COLUMN = (SELECT COLUMN FROM TABLE WHERE user_id=#) WHERE user_id=#; 
+0

假设表已经创建并且列已设置。我正在尝试将表格中的数据更新到另一个表格。在备份表中,我会将新数据附加到正确的列。我相信这需要一个'JOIN',但我不确定如何格式化它。你能写代码吗? – mlishn 2012-08-02 17:26:07

+0

是的,我可以做到这一点。给我一分钟来更新我的答案。 – Shawn 2012-08-02 17:27:35

+0

这需要从a中的所有列并将它们设置为b对吗? – mlishn 2012-08-02 17:39:58