2012-08-02 55 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