Hallo,
wie können die Preise von vielen Artikeln einfach aktualisiert werden?
Ich habe es mit folgender SQL versuch, die per Skript erzeugt wird:
UPDATE `oxarticles` SET `OXPRICE` = 1.234 WHERE `OXARTNUM` = "Art-123";
UPDATE `oxarticles` SET `OXPRICE` = 5.678 WHERE `OXARTNUM` = "Art-456";
usw.
Die Artikel-Preise werden auch korrekt aktualisiert und im Shop angezeigt. Leider wird bei Artikeln mit Varianten der Preis vom Vaterartikel nicht aktualisiert. Wie kann das Problem gelöst werden?
Vielen Dank im voraus und allen einen schönen Abend!
guck mal, ob im Feld oxvarminprice etwas drin steht
Hallo,
vielen Dank für die Rückmeldung!
Also in der Tabelle ‘oxarticles’ steht im Feld ‘oxvarminprice’ beim Vaterartikel immer der kleinste positive Wert der Variante (nur bei Änderungen im Shop) und bei der Variante (Artikel) immer eine 0.
Das Feld ‘oxvarminprice’ wird natürlich nicht mit der SQL aktualisiert. Wie kann das Feld korrekt aktualisiert werden und müssen dann ggf. noch weitere Felder geändert werden?
Ich bin gerade fernab von meinem PC, aber ich glaube mich erinnern zu können, dass man den oxvarminprice auf 0 setzen könnte und der shop den Preis dann selbst berechnen. Wäre ein Versuch wert. Sonst ein SQL Update mit subselect auf min oxprice von allen aktiven Varianten
nein, da fehlt noch was:
es werden nicht nur aktive Varianten abgefragt, sondern auch inaktive -> mögliche Abmahnung
UPDATE oxarticles B ,(
SELECT oxactive, oxparentid,MIN( oxprice ) AS min ,MAX( oxprice ) AS max
FROM oxarticles [B]WHERE oxactive = 1[/B]
GROUP BY oxparentid
) AS A
SET B.oxvarminprice = A.min, B.oxvarmaxprice = A.max
WHERE B.oxid = A.oxparentid
1 Like
Das SQL funktioniert in der Form nicht wenn Varianten existieren die den Preis des Vaters erben.
Man könnte auch die interne Funktion mit einem Script aufrufen:
<?php
require_once dirname(__FILE__) . "/../bootstrap.php";
$myConfig = oxRegistry::getConfig();
$oArtlist = oxnew('oxarticlelist');
$oArtlist->getList();
foreach ($oArtlist as $oArt){
$oArt->onChange();
}
Das könnte man modifizieren so dass z.B. nur Parents aktualisert werden oder nur die tatsächlich geänderten Artikel.
[QUOTE=leofonic;188832]Das SQL funktioniert in der Form nicht wenn Varianten existieren die den Preis des Vaters erben.[/QUOTE]
Danke. Guter Hinweis. Das kann man noch hinzufügen.
Hallo,
vielen Dank an alle für die tolle Beteiligung an diesem Beitrag!
Die SQL von “foxido.de” funktioniert in meinem Fall super, da keine Varianten existieren die den Preis des Vaters erben! Das Problem ist damit gelöst. Danke!
Dennoch wäre es für andere ggf. hilfreich und würde mich auch interessieren, wie die SQL ggf. zu erweitern ist, damit nur die tatsächlich geänderten Artikel aktualisiert werden…
Viele Grüße und Danke!
[QUOTE=cyberduk;188930]… dennoch wäre es für andere ggf. hilfreich und würde mich auch interessieren, wie die SQL ggf. zu erweitern ist, damit nur die tatsächlich geänderten Artikel aktualisiert werden…
Viele Grüße und Danke![/QUOTE]
Das dürfte dann so aussehen:
UPDATE oxarticles B ,(
SELECT oxactive, oxparentid,MIN( oxprice ) AS min ,MAX( oxprice ) AS max
FROM oxarticles WHERE oxactive = 1
GROUP BY oxparentid
) AS A
SET B.oxvarminprice = CASE WHEN A.min IS NULL THEN B.oxprice ELSE A.min END,
B.oxvarmaxprice = CASE WHEN A.max IS NULL THEN B.oxprice ELSE A.max END
WHERE B.oxid = A.oxparentid