Artikelvarianten aktivieren per SQL-Befehl

Liebe Community,

Unser Kunde hat Hauptartikel mit sehr vielen (hunderten) Varianten.
Ich muss jetzt bei allen Varianten die Lager auf z.B. 2 setzten (stock & available_stock) sowie die Varianten dann noch aktivieren.

Der SQL Befehl für das Lager hat perfekt funktioniert:

UPDATE product SET stock = '2' WHERE product_number LIKE 'SW10060.%'
UPDATE product SET available_stock = '2' WHERE product_number LIKE 'SW10060.%'

Bei der Aktivierung der Variante komme ich aber mit diesem Befehl nicht durch. Es ergibt einfach kein Resultat aber auch keine Fehlermeldung.

UPDATE product SET active = '1' WHERE product_number LIKE 'SW10060.%'

Hat jemand eine Idee woran das liegen könnte?
Schöne Grüsse aus der Schweiz

Was zeigt er den, wenn Du Dir die Resultate für product_number wie oben und where active = ‚0‘ anzeigen lässt?

Grüsse aus der Schweiz

Alfred

Hi Alfred,

In unserem Fall ist in der Ausgangslage active „NULL“. Wie im Printscreen ersichtlich zeigt es 164 Datensätze, wenn ich diese einfach abfragen will:

SELECT * FROM `product` WHERE `product_number` LIKE 'SW10060.%' AND `active` IS NULL

Das Update der 164 Datensätze hingegen zeigt 0 gefundene Zeilen in der Simulation:

UPDATE `product` SET active = '1' WHERE `product_number` LIKE 'SW10060.%' AND `active` is NULL

Wir hatten hier letzthin auch das Problem, dass man „product“ aus einer Wawi nicht mit Daten befüllen kann. Ist aber noch nicht gelöst, da nicht dringend.

Wir vermuten ein Rechteproblem.

Guten Abend!

Ich verstehe nicht ganz das Problem. Das Feld active ist vom Typ tinyint (also 0-255). Warum schreibt Ihr dann mit Anführungszeichen, die sind doch eigentlich für Textwerte?

in meinen Augen wäre logischer
Update product set „active“ = 1 where („active“ is null) and („product_number“ like „SW10060.%“);

Das Ganze natürlich mit einfachen Hochkommas geschrieben.

Vielen Dank für den Tipp. Leider bringt das auch das gleiche Resultat. Ich denke es hat damit zu tun, dass die Varianten den Status „active“ des Hauptartikels erben. In unserem Fall aber bringt eine Anpassung auf dem Hauptartikel ebenfalls keine Veränderung auf den Status der Varianten (was auch durchaus logisch erscheint). Wenn ich diese Abhängigkeit im Backend von SW6.4 mit dem Klick auf die Kette löse, dann kann ich genau diese Artikel auch mittels SQL-Befehl ändern. Mehrere hundert Varianten im Backend einzeln anklicken kann auch nicht die Lösung sein.

Die Frage ist nun, in welcher Tabelle diese Abhängigkeit vom „active“ Status der Varianten zum Hauptartikel definiert ist und wie dieser mittels SQL gelöst werden kann. Ich denke, dass dies auch die Lösung für das von tarkka.ch beschriebene Problem wäre.

Was steht denn bei Dir unter „properties“ in der gleichen Tabelle?

Here we go:

Und jetzt ist das Problem gelöst?

Nein, leider nicht. Solange eine Variante den „active“ Status vererbt erhalten bekommt, kann keine Massenmutation via SQL gemacht werden. Vielleicht hat jemand von Shopware selbst noch eine Lösung dazu? Im Moment müssten wir immer noch mehrere hundert Varianten im Backend einzeln manuell anklicken.

Da häng ich mich doch rein … hier das gleiche Problem … stock geht … active nicht … in der Roadmap steht zwar das soll jetzt endlich umgesetzt werden mit der „Massenänderung“ aber ich will nicht solange warten müssen :wink: Hilfe!

Vielleicht kann @Moritz_Naczenski etwas Licht ins Dunkel bringen?

Das wird schon per SQL gehen … wenn ich mir ein ähnliches Beispiel ansehe,vermutlich Shopware 5, brauchte es da etwas mehr Tabellen im Update-Befehl

https://shopdoktor.com/shopware/anleitungen/shopware-sql-inhalt-einer-variante-von-optionsname-der-variante-ableiten/

Bei einer aktivierbaren Vererbung von Eigenschaften (bei Varianten) kann es einfach nicht in „product“ stehen.

Dafür brauchen man eigentlich (geht am schnellsten) ein Datenbankschema um zu sehen, welche Tabellen voneinander abhängen und wie sie mit Foreign-Keys miteinander verbunden sind.

active = 1 (das ist ein int-field)

„active“ nicht in Anführungszeichen, weder beim set, noch im where.

Dann sollte das auch funktionieren.

Die Vererbungslogik ist simpel: Feld = null → erbt vom parent. Feld != null → Keine Vererbung

Lieben Dank an alle, die sich hier reinhängen!!

Leider bringt der Ansatz von @max.penth keine Lösung. Auch dieser Code ohne Anführungszeichen bringt 0 Resultate:

UPDATE product SET active = 1 WHERE product_number LIKE 'SW10060.%'

Der Ansatz von @UhrenZietz scheint mir plausibel. Das Schema ist allerdings von SW5. Wäre jemand in der Lage das auf auf SW6.4 zu „übersetzen“?

Hallo,
auch wenn der Beitrag schon etwas älter ist, ein möglicher, bei mir funktionierender Workaround ist folgender. Weil lesen und updaten zeitgleich auf die selbe Tabelle nicht möglich ist …

  1. View erstellen mit „CREATE OR REPLACE ALGORITHM=TEMPTABLE SQL SECURITY DEFINER VIEW myProductView AS SELECT * from product;“
  2. Update starten für z.B. nur das Hauptprodukt (nicht die Variante)
    „UPDATE product SET active = 1 WHERE id IN (SELECT mpv.parent_id FROM myProductView AS mpv WHERE mpv.product_number = ‚meineNummer‘);“

Wenn die Varianten angepasst werden sollen, muss das Statement für das Update umgeschrieben werden. Danach ggf. im Backend den Cache leeren und die Indexe neu erstellen lassen.

Gruß