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