2012-09-10 35 views
1

更新表contracts根據contracts_history表中的值其中兩個id是相同的其他行。更新表的行按其他表中的其他行的值按相同的ID

我寫這篇文章的代碼,但不工作:

function recover_contract($contract_id) 
{ 
$sql = "UPDATE contracts SET ROW = (SELECT * FROM contracts_history WHERE contracts.ID = contracts_history.ID)"; 
$result = $this->update($sql); 
return $result; 
} 

UPDATE:
我使用此代碼

update 
contracts a, 
contracts_history b 
set 
a.name_surname=b.name_surname 

但我的表有64結構 不是複製任何解決方案所有的數據與out類型都是結構? 必須這樣:

$sql = "INSERT INTO `contracts_history` SELECT * FROM `contracts` 
     WHERE id='$contract_id'"; 

回答

2

的語法如下:

update 
    contracts a, 
    contracts_history b 
set 
    a.col1=b.col1, 
    a.col2=b.col2 
where 
    a.id=b.id 

關於這一點,雖然,你有沒有在查詢中指定ID,這意味着它將更新是在歷史表中的所有行。你可以像這樣添加條件:

update 
    contracts a, 
    contracts_history b 
set 
    a.col1=b.col1, 
    a.col2=b.col2 
where 
    a.id=b.id 
    and a.id=3 
+0

我可以使用這個代碼Correnctly –

2

你可以試試這個作爲你的查詢嗎?

$sql = "UPDATE contracts c 
     LEFT JOIN contracts_history h ON c.ID = h.ID 
     SET WHAT_YOU_WANT"; 
+0

喜@Giez,我只是格式化你的代碼,使之更加明確:d –

+0

好吧,小更新,但大功能:d感謝的人... –

2

由於您更新爲一列,因此您的subquery應該只返回一個值。

嘗試,通過使用JOIN

UPDATE contracts a 
     INNER JOIN contracts_history b 
     ON a.ID = b.ID 
SET a.row = b.columnName 

UPDATE 1

OK

UPDATE contracts 
SET ROW = (SELECT columnName 
      FROM contracts_history 
      WHERE contracts.ID = contracts_history.ID 
      LIMIT 1) 

或使用。因此在第一種使用子查詢中的值進行更新的類型中,我在select語句中添加了LIMIT,因爲您無法更新其上具有多個值的列,否則您將收到錯誤消息。在正在加入兩個表的第二部分中,a.ID = b.ID是兩個表的關係。這定義了表格之間的關係。 SET a.row = b.columnName,columnName是基本在表contracts_history上的值的來源。

+0

無法正常工作 –

+0

@ user1659079哪一個不能正常工作? –

+0

它根本不工作 –

相關問題