J'ai montré ci-dessous ce qui a été dit dans les commentaires à la question :
CREATE TRIGGER some_trigger AFTER UPDATE ON table_a
FOR EACH ROW BEGIN
DECLARE tname VARCHAR(20);
IF (NEW.field_offer=1) THEN
UPDATE `table_b`
SET STOCK = CASE NEW.field_state
WHEN 0 THEN STOCK - 1
WHEN 1 THEN STOCK + 1
ELSE STOCK
END
WHERE ID=NEW.ref_field
;
ELSEIF (NEW.field_offer=0) THEN
UPDATE `table_c`
SET STOCK = CASE NEW.field_state
WHEN 0 THEN STOCK - 1
WHEN 1 THEN STOCK + 1
ELSE STOCK
END
WHERE ID=NEW.ref_field
;
END IF;
...
Notez que j'ai changé les mises à jour de UPDATE ... JOIN
comme MySQL ne vous permet pas de modifier les données de la table déclenchée ; alors que vous ne mettiez pas réellement à jour table_a, le JOIN aurait pu être suffisant pour que MySQL s'y oppose... cela et les jointures auraient mis à jour chaque ligne dans table_b/c
qui avait une correspondance dans table_a
, pas seulement table_a
lignes liées aux valeurs dans ou ligne du déclencheur.