Hallo. Ich nutze Gambio in Verbindung mit Dreamrobot, komme aber beim Mengenabgleich bei Artikel mit Varianten nicht weiter. Und zwar lege ich einen Artikel an, dieser Artikel hat die Varianten "Farbe rot" und "Farbe blau", beide Farben sind zu je 100 Stück verfügbar. Nun müsste sich der Gesamtbestand aus beiden Varianten automatisch ergeben, also 200 Stück. Dies funktioniert aber bei Gambio nicht da ich beim Hauptartikel (Parent) selbst auch noch eine Stückzahl eingeben werden muss was total unlogisch ist. Gibt es eine Möglichkeit das sich der Gesamtbestand vom Hauptartikel automatisch aus den Variantenbeständen ergibt, ggfs. über ein Modul oder eine Umprogrammierung? Hat das evtl. jemand schonmal umgesetzt? VG Steff
Was genau ist hier das Problem? Was möchtest Du hier genau erreichen? Ja, gibt es. Aber: Vielleicht ist dies gar nicht notwendig!? Viele Grüße
Dieser Trigger aktualisiert bei Änderung eines Variantenbestands den Bestand des Hauptartikels auf die Summe der Variantenbestände des jeweiligen Artikels: Code: DELIMITER $$ CREATE TRIGGER update_products_quantity AFTER UPDATE ON products_properties_combis FOR EACH ROW BEGIN DECLARE total_quantity DECIMAL(10,2); -- Berechne die Summe der combi_quantity für die jeweilige products_id SELECT SUM(combi_quantity) INTO total_quantity FROM products_properties_combis WHERE products_id = NEW.products_id; -- Aktualisiere den Bestand in der products-Tabelle UPDATE products SET products_quantity = total_quantity WHERE products_id = NEW.products_id; END$$ DELIMITER ;
@Dominik Späte Vielen Dank für den Trigger, das wäre die Lösung wenn sich bei Änderung eines Variantenbestands automatisch auch der Bestand des Hauptartikels auf die Summe der Variantenbestände ändert. Den Trigger muss ich unter Toolbox -> SQL ausführen, ist das richtig? Danke und viele Grüße
Du legst damit den Trigger an. Dr läuft dann dauerhaft direkt in der Datenbank und wird automatisch ausgeführt wenn die Bedingung eintritt. In diesem Fall wenn sich irgendwas in products_properties_combis ändert. Also bei den Varianten.
Ja, richtig. Leider klappt es da aber nicht immer. Dann müsstest Du auf z.B. phpMyAdmin ausweichen. Anschließend kannst Du z.B. damit kontrollieren, ob das Anlegen geklappt hat: Code: SHOW TRIGGERS WHERE `Trigger` = 'update_products_quantity' Ja, völlig richtig. Und mich stört dieses "irgendwas". Wenn sich der Variantenbestand nicht ändert, brauchen wir auch den Bestand des Hauptartikels nicht neu berechnen und "ändern". Deshalb hier nochmal etwas effizienter: Code: DROP TRIGGER IF EXISTS update_products_quantity; DELIMITER $$ CREATE TRIGGER update_products_quantity AFTER UPDATE ON products_properties_combis FOR EACH ROW BEGIN DECLARE total_quantity DECIMAL(10,2); -- Nur ausführen, wenn sich combi_quantity geändert hat IF NEW.combi_quantity != OLD.combi_quantity THEN -- Berechne die Summe der combi_quantity für die jeweilige products_id SELECT SUM(combi_quantity) INTO total_quantity FROM products_properties_combis WHERE products_id = NEW.products_id; -- Aktualisiere den Bestand in der products-Tabelle UPDATE products SET products_quantity = total_quantity WHERE products_id = NEW.products_id; END IF; END$$ DELIMITER ;
@Dominik Späte Vielen Dank. Hab es nun über phpMyAdmin versucht, kann den Trigger aber nicht erstellen da ich eine Fehlermeldung erhalte, siehe Screenshots:
Hinweis zu Triggern: Diese soillten man sich als Script auch zusätzlich abspeichern, da diese bei´einer Gambio Datenbanksicherung aus dem Admin Backend nicht (!) mit gesichert werden, also auch bei einer Wiederherstellung über den Gambio Admin nicht wieder erstellt werden. Diese müssten dann über phpadmin wieder neu angelegt werden.
Deshalb besser mit mysqldump auf der Console sichern oder direkt als lokaler Cronjob. Da kommt alles mit. Auch Trigger und Events.
@Dominik Späte: Ich packe also nur deinen Code aus Post #7 in SQL rein und schon stimmt die Artikel Gesamtanzahl anhand der Summe der Varianten?! Da krieg ich ja gleich feuchte Augen @Christian Mueller: Kannst du mir einen Hilfs Input geben bitte, wie ich einen Cronjob mit diesem SQL Befehl erschaffe
Nein. Und ohne Christian vorgreifen zu wollen: Du brauchst keinen CronJob, weil der Trigger sich live darum kümmert. Um einmalig (bzw. initial) die Bestände der Hauptartikel auf die Summe der Variantenbestände des jeweiligen Artikels zu aktualisieren, kannst Du das hier verwenden: Code: UPDATE products p JOIN ( SELECT products_id, SUM(combi_quantity) AS total_quantity FROM products_properties_combis GROUP BY products_id ) c ON p.products_id = c.products_id SET p.products_quantity = c.total_quantity;
ich meinte Du solltest mit mysqldump per Cronjob sichern. Dafür brauchst du Zugriff auf die Shell/Console.Hat aber den Vorteil, daß das dann ohne PHP dazwischen läuft und keine PHP-Beschränkungen greifen. Daher gibt es da auch keine Timeouts. Wie das mit einem einfachen Shell-Script geht, habe ich mal vor Urzeiten beschrieben: Automatische Sicherung der Dateien
wie kann ich denn nur die positiven Werte zählen lassen? Ich arbeite viel mit Vorbestellungen und wenn bei einem Artikel noch 3 lagernd sind in Option A, aber in Option B 25 vorbestellt schaut der Bestand von -22 im Artikel nicht gut aus. Code: UPDATE products p JOIN ( SELECT products_id, SUM(combi_quantity) AS total_quantity FROM products_properties_combis GROUP BY products_id ) c ON p.products_id = c.products_id SET p.products_quantity = c.total_quantity;
Code: UPDATE products p JOIN ( SELECT products_id, SUM(combi_quantity) AS total_quantity FROM products_properties_combis WHERE combi_quantity>0 GROUP BY products_id ) c ON p.products_id = c.products_id SET p.products_quantity = c.total_quantity;