2014-03-25 49 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'