Wer kennt das nicht? Ein neues System aufgesetzt, Artikeldaten importiert oder aus einer Wawi eingespielt und einiges ausprobiert. Nach den Tests müssen die Artikel wieder entfernt werden.  Bei 10 oder 50 Artikeln kein Problem, doch was ist wenn man 1500 Artikel in Magento hat? Die Löschfunktion innerhalb von Magento ist auch unter 1.8 recht langsam und so können mehrere Minuten bis Stunden beim Löschen „drauf“ gehen.

Idealerweise gibt es die Möglichkeit direkt über die Datenbank die Artikel zu entfernen. Hierbei gibt es zwei Lösungen. Die erste Lösung wäre ein truncate der betroffenen Tabellen inkl. auffüllen der Tabellen mit den Standarddaten:

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_entity`;
TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;
INSERT  INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default');
INSERT  INTO `catalog_product_link_type`(`link_type_id`,`code`) VALUES (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
INSERT  INTO `catalog_product_link_attribute`(`product_link_attribute_id`,`link_type_id`,`product_link_attribute_code`,`data_type`) VALUES (1,2,'qty','decimal'),(2,1,'position','int'),(3,4,'position','int'),(4,5,'position','int'),(6,1,'qty','decimal'),(7,3,'position','int'),(8,3,'qty','decimal');
SET FOREIGN_KEY_CHECKS = 1;

Das Problem bei dieser Lösung kann aber sein, dass es ein Problem mit den indexen gibt. Deswegen kann man auch ein

DELETE FROM catalog_product_entity;

durchführen. Der Vorteil hier ist, dass die zugehörigen Tabellen miteinander verbunden sind, werden die zugehörigen Einträge in den anderen Tabellen auch gelöscht. Sollte man über sehr viele Daten verfügen, kann das aber auch einen phpMyAdmin in die Knie zwingen und man sollte vielleicht in chargen arbeiten, in dem man einfach ein LIMIT = X dem delete Befehl anfügt. Das X sollte dann natürlich durch den Limiter ersetzt werden.

In beiden Fällen ist aber zudem ratsam im media/catalog/product die Verzeichnisse und Dateien zu löschen, da sonst Datenleichen auf dem Server zurück bleiben die schnell viel Speicher fressen können.

Bitte beachten: Es werden nur die Produkte mit den Attribut Values gelöscht – jedoch keine Attribute bzw. Kategorien! Vorher sollte immer ein DB-Backup durchgeführt werden und es sollte nicht in produktiven Livesystemen genutzt werden!