おそらく、これを単一のSQLとして実行するのが最善です:-
UPDATE stock a INNER JOIN order b ON a.part = b.part
SET a.available = a.available - b.qty
WHERE b.invoice` = '$order'
注文が在庫の更新にまだ使用されていないことを確認する方法なしに、これを複数回再実行しないように注意してください
このようにすると、注文に1000個のアイテムがある場合、それは単一のクエリになります。選択を実行してから結果をループするには、10001クエリが必要になります。