cancel
Showing results for 
Search instead for 
Did you mean: 

SQL Abfrage Hilfe

SQL Abfrage Hilfe

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

5 REPLIES

Re: SQL Abfrage Hilfe

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.

Mit freundlichen Grüßen, Sebastian Keutmeier

Re: SQL Abfrage Hilfe

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

Re: SQL Abfrage Hilfe

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

Mit freundlichen Grüßen, Sebastian Keutmeier

Re: SQL Abfrage Hilfe

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

 

Re: SQL Abfrage Hilfe

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

Mit freundlichen Grüßen, Sebastian Keutmeier