Hallo liebe Community,
ich suche nach jemanden der mir kurz Helfen kann? Ich brauche eine SQL-Abfrage welche mir alle Produkte die
Menge = "-1"
Status= "Disabled"
löscht. Leider habe ich viel schon probiert aber nicht zur Lösung gekommen bin.
DELETE e.* FROM catalog_product_entity e INNER JOIN catalog_product_entity_int v ON v.entity_id=e.entity_id AND v.attribute_id=(SELECT attribute_id FROM eav_attribute WHERE attribute_code='status') WHERE v.value=2;
Das hätte ich bereits. Somit löscht er mir alle "Disabled" Produkte.
Hoffe mir kann jemand helfen. Danke.
Liebe Grüße
Hallo Daniel,
man sollte es dringend vermeiden direkte SQL-Operationen durch zu führen.
Das kann die Mage-Klasse besser.
zB.
$products = Mage::getModel('catalog/product')->getCollection()->addFieldToFilter('status',Mage_Catalog_Model_Product_Status::STATUS_DISABLED);
Danach können Sie mit dem stock_item Model die Lagerbestände prüfen.
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product);
die Menge ist dann übrigens das attribut "qty".
Nachdem die richtigen Produkte ausgewählt sind können sie mit:
$product->delete();
die Produkte löschen die Sie möchten.
Das ist um einiges sauberer und sorgt für eine konsistente Datenbank.
Hallo,
danke für deine Antwort:
include_once "app/Mage.php"; Mage::init(); Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); // This gives us the rights to delete $collection = Mage::getModel('catalog/product') ->getCollection() ->addAttributeToSelect('*') ->addAttributeToFilter('status', array('neq' => 1)) // only get disabled ->addAttributeToFilter('qty', array('neq' => -1)) // SO? ->load(); foreach($collection as $_product) { echo 'Deleting: '.$product->getName().'<br />'; $_product->delete(); }
Das wäre vermutlich so nicht möglich? Skript ist aus dem Internet.
lg
Hallo,
Nein, leider.
Die "qty" ist nicht im Produkt-model gespeichert sondern im "stock_item".
Es wäre theoretisch möglich eine etwas kompliziertere left-join regel zu erstellen, das müsste ich allerdings erst vorher selbst testen.
Wenn es nicht um mehr als 10.000 (ausgeschaltete) produkte geht reicht es also auch wenn man das in 2 schritten macht.
Viel Erfolg
Hallo,
ja der Shop hat zirka 28000 Artikel kommen noch viele dazu. Über eine Schnittstelle werden diese Importiert. Diese ändern sich täglich 4 x.
Darum wäre das schon super wenn du mir vielleicht helfen könntest.
Liebe Grüße
Hallo,
$collection = Mage::getModel('catalog/product') ->getCollection() ->addAttributeToFilter( 'status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED) ) ->addAttributeToSelect('*') ->joinField('qty', 'cataloginventory/stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left') ->addAttributeToFilter('qty', array("lt" => 0)); foreach ($collection as $c){ $p = Mage::getModel('catalog/product')->load($c->getId()); $p->delete(); }
Das sollte funktionieren.
Viel Erfolg