2017-02-05 7 views
0

ich habe 3 TabellenTrigger auf Einfügen, Aktualisieren andere Tabelle aber nur eine Zeile

Tabelle Produkt (PK id_product, qty_stock) - Ich habe mehrere Produkte

Tischverbindung (PK FK id_product, PK FK id_order) - der Fremdschlüssel zu den anderen zwei Tabellen zeigt

Tabellenreihenfolge (PK id_order, qty_bought)

Frage
ein Trigger, subtrahiert qty_bought von qty_stock, wenn eine Bestellzeile erstellt wird, das Problem ist, dass FOR JEDER ZEILE alle Produktreihen subtrahiert und ich kann keinen Weg finden, um zu sagen, welches Produkt, weil die Auftragstabelle keine id_product-Referenz hat. Gibt es eine Lösung oder muss ich die Tabellen ändern? Danke.

DROP TRIGGER IF EXISTS OnInsertStock; 
DELIMITER // 
CREATE TRIGGER OnInsertStock 
    AFTER INSERT ON order FOR EACH ROW 
    BEGIN 
    UPDATE product   
    SET qty_stock = qty_stock - new.qty_bought 
    END // 
DELIMITER ; 

Antwort

2

Sie benötigen eine Multi Table Update.

Verbinden Sie product und link und aktualisieren Sie dann nur Felder von product.

DROP TRIGGER IF EXISTS OnInsertStock; 
DELIMITER // 
CREATE TRIGGER OnInsertStock 
    AFTER INSERT ON order FOR EACH ROW 
    BEGIN 
    UPDATE product, link 
     SET product.qty_stock = product.qty_stock - new.qty_bought 
    WHERE product.id_product = link.id_product 
     AND link.id_order = new.id_order 
    END // 
DELIMITER ; 
+0

bereits versucht, aber es dauert noch immer weg von allen Reihen, statt nur die in der Reihenfolge eingefügt Produkt – Noobest

+0

ich den letzten Teil der WHERE-Teil benötigt hinzugefügt haben. Sie müssen ID_order aus der einfügen bei der Auswahl aus der Link-Tabelle –

+0

Wie immer Ende das Problem war woanders, ich habe vergessen, Informationen in Link-Tabelle gleichzeitig mit der Einfügung in Reihenfolge, aber Ihre Antwort war richtig und thx für die Hilfe . – Noobest

Verwandte Themen