2017-01-01 3 views
0

Inventar Tabelle:MySQL Trigger-Wert von vorherigen Zeile mit demselben Spaltenname

enter image description here

Inventar Geschichte Tabelle:

enter image description here

Die Abfrage:

INSERT INTO inventory_history (SKU, Quantity, timestamp) 
SELECT SKU, Quantity, modifiedtime FROM inventory WHERE modifiedtime BETWEEN '2016-12-25 00:00:00' AND '2016-12-26 00:00:00'; 

der Auslöser :

CREATE TRIGGER `sold_diff` BEFORE INSERT ON `inventory_history` 
FOR EACH ROW begin 
declare prev_quantity int(11) default 0; 
declare prev_sku varchar(255) default null; 

select sku 
into prev_sku 
from inventory_history 
where prev_sku = NEW.sku 
order by id desc 
limit 1; 

select quantity 
into prev_quantity 
from inventory_history 
order by id desc 
limit 1; 

set NEW.sold = prev_quantity 
; 
end 

Das Ergebnis:

enter image description here

Nun, wie es Set-up ist es prev_quantity aus der vorherigen Reihe nehmen und sie in die sold Spalte setzen.

Ich kann nicht einen Weg finden, zu binden SKU mit prev_quantity, so dass es mir den vorherige Menge Wert aus der entsprechenden Artikelnummer geben.

Gewünschtes Ergebnis:

enter image description here

Ich habe mit einer Vielzahl von verschiedenen WHERE Klauseln über die beiden erklärt verwirrte, aber nichts funktioniert richtig .. so ich denke, dies ist nicht der richtige Weg nehmen.

Wie kann dies erreicht werden?

+0

Erzähl uns über 4, 23, 57, & 58 – Strawberry

+0

das ist nur ich tue Tests auf meinem localhost und Löschen von Spalten, damit ich meine Abfrage erneut versuchen kann, das ist, warum sie so komisch sind. Normalerweise wäre es nur ein normales Autoinkrement. – bbruman

+0

Wenn ich es wäre, würde ich von vorn anfangen, mit einem richtigen MCVE und einem gewünschten Ergebnis - also nichts davon auslösen Geschäft; das kann später kommen, sobald Sie eine funktionierende Anfrage haben. – Strawberry

Antwort

0

Ich denke, dass Sie den falschen Ansatz nehmen.

Sie scheinen einen Einsatz auf der inventory Tabelle zu wollen. Wenn ein neuer Wert eingefügt oder aktualisiert (oder gelöscht) wird, fügen Sie eine Zeile in die Tabelle inventory_history mit den Werten old und new ein.

Sie benötigen dann keine explizite Einfügung auf inventory_history.

+0

Vielleicht ist dies eine Lösung, habe es nicht vorher gedacht. Die Sache ist, Einträge in der "Inventar" -Tabelle werden hunderte Male am Tag aktualisiert, einige für die gleiche "sku". Meine Abfrage wurde entwickelt, um jeden Abend um Mitternacht einen Schnappschuss von neu aktualisierten Inventarobjekten aufzunehmen und sie in die Tabelle "inventory_history" – bbruman

+0

@bbruman einzufügen. . . Warum benötigen Sie den vorherigen Wert wirklich, wenn Sie ihn durch Abfragen der Tabelle abrufen können? –

+0

Damit kann ich die "neue.Quantity" von diesem vorherigen Wert subtrahieren und die Gesamtmenge berechnen, die ich verkaufe (also werde ich 100 - 90 und 5100 - 5000 machen) für den tatsächlich verkauften Spaltenwert. Ich habe nur versucht, die Frage zu minimieren, weil ich in der Lage sein muss herauszufinden, wie man die 'SKU' anpasst, um den vorherigen Mengenwert – bbruman

Verwandte Themen