2014-03-25 77 views
0

我想更新MySQL表結果從另一個表中使用while循環提取的結果,但它只更新最後的結果集。MySQL更新在一個while循環只更新最後的結果

這裏是代碼

$qa=$db->query("SELECT *, (acq_subudget.RemBal-order_items.total_cost) AS rama FROM order_items, acq_subudget WHERE invoice_num='$ordnumber_update' AND acq_subudget.id=order_items.disc"); 


while($qa_data=$qa->fetch(PDO::FETCH_ASSOC)) 
{ 
set_time_limit(0); 
$account_remaining=$qa_data['rama']; 
$account_name=$qa_data['acq_subudget.disc']; 
$account_id=$qa_data['id']; 
$qa_update=$db->exec("UPDATE `acq_subudget` SET RemBal='$account_remaining' WHERE id='$account_id'"); 
} 

我使用PDO

+0

使用$ qa_data [{} table_name的.ID],我是t是你從中提取的id是從最後一個表中提取的。 – Smokie

+0

或者,你的意思是$ qa_data ['account_id']; ?? – Smokie

+0

通過任何機會,order_items和acq_subudget都有名爲id的列嗎? – Kickstart

回答

0

您使用獲取的,而不是使用fetchall,只獲取會從結果的下一行,

+1

提取不斷獲取後續行,直到它碰到結果集的末尾時返回NULL。一次提取全部返回整個結果集。通常使用fetch被認爲是更好的選擇,因爲數據庫服務器可以在將結果同時處理的同時將結果流式傳輸到客戶端。 – Charlie

0

順便說一句,你也許可以這樣做在一個單獨的語句,而無需一個循環: -

UPDATE acq_subudget 
INNER JOIN order_items 
ON acq_subudget.id = order_items.disc 
SET acq_subudget.RemBal = acq_subudget.RemBal-order_items.total_cost 
WHERE acq_subudget.invoice_num='$ordnumber_update'