Prawdopodobnie najlepiej zrobić to jako pojedynczy fragment SQL:-
UPDATE stock a INNER JOIN order b ON a.part = b.part
SET a.available = a.available - b.qty
WHERE b.invoice` = '$order'
Uważaj, aby nie powtarzać tego wiele razy bez możliwości sprawdzenia, czy zamówienie nie zostało już wykorzystane do aktualizacji zapasów
Robiąc to w ten sposób, jeśli masz 1000 pozycji na zamówieniu, to jest to jedno zapytanie. Wykonanie wyboru, a następnie zapętlenie wyników wymagałoby 10001 zapytań.