我有两个mysql表:
rawmats
的表格,用于存储一些原材料的数量; stock_changes
的存储事件,当某种材料的库存发生变化时(存储增量数量,与材料ID绑定)。我需要发出一个mysql请求,以便将stock_changes
表中存储的所有更改撤消到rawmats
中存储的实际库存。
目前,以下php代码做得很好:
$stock_changes_req = $db->prepare('SELECT rawmat_id, delta FROM stock_changes');
$stock_update_req = $db->prepare('UPDATE rawmats SET stock = stock - :delta WHERE id=:rawmat_id');
$stock_changes_req->execute();
$stock_changes = $stock_changes_req->fetchAll(PDO::FETCH_ASSOC);
foreach ($stock_changes as $stock_change)
$stock_update_req->execute($stock_change);
有两个问题:
答案 0 :(得分:1)
是的,在一个查询中合并select和update是个好主意,特别是当它避免了更慢的php循环时。请考虑以下解决方案草案:
UPDATE table1 t1, table2 t1 SET t1.stock = t1.stock - t2.delta WHERE t1.id=t2.id and ...
您还可以使用快速临时内存表(包含来自任何SELECT的半结果)或子查询而不是 table2