2012-01-17 109 views
16

關於Magento上的這個問題有很多帖子。他們大多數工作,但在執行刪除代碼/ SQL語句後,類別沒有將其值重置爲零的問題仍然存在,直到現在還沒有解決。刪除Magento上的所有產品

這裏有沒有人有正確的代碼或過程來正確刪除清單中的所有產品,並且在執行它後類別列表也重置爲零?

在此先感謝。

+0

你的意思是身份證號碼?你必須重置表的auto_increment主鍵。 – 2012-01-17 18:02:52

+0

不,我正在計算每個類別下的產品數量。 – 2012-01-17 18:21:41

回答

4

無論用於刪除產品的方法如何,重建「類別產品」索引都應修復計數。進入系統>索引管理。選中「類別產品」旁邊的框,將操作(右上角)更改爲「Reindex」,然後單擊「提交」。

+0

我改變了主意。爲了那些有類似問題的人的利益,我選擇這個作爲最合適的答案。 – 2013-02-21 01:19:30

3

爲了刪除產品,您可以簡單地使用後端:
目錄>管理產品>選擇所有checboxes,然後選擇Action = Delete並點擊提交。
這可能對數千種產品非常有用。

+4

謝謝。這對400,000 ++產品如何工作? – 2012-01-17 20:28:25

+0

對於那麼多的產品來說,它會非常慢並且內存/服務器超時問題。 – MagePsycho 2012-01-18 16:53:08

5

要刪除所有產品,您可以使用此查詢:

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 `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'); 
INSERT INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default'); 

問候:)

+0

由於數據完整性問題,此查詢不起作用。它顯示錯誤'#1701 - 無法截斷外鍵約束中引用的表('dbname'.'catalog_product_bundle_option_value',CONSTRAINT'FK_MKM_CAT_PRD_BNDL_OPT_VAL_OPT_ID_MKM_CAT_PRD_BNDL_OPT_OPT_ID' FOREIGN KEY('option_id')REFERENCES'dbname'.catalog_produ)''。任何想法解決它? – Abaij 2013-07-31 17:28:51

+2

在上面的代碼頂部添加'SET FOREIGN_KEY_CHECKS = 0;'並添加'SET FOREIGN_KEY_CHECKS = 1;'底部代碼。 – Zaheerabbas 2013-11-26 05:17:00

+0

刪除檢查數據完整性,交叉手指,並希望數據損壞不會繼續='SET FOREIGN_KEY_CHECKS = 0;' – 2014-03-31 15:21:38

51

刪除從Magento的所有產品都可以輕鬆實現,只需運行:

DELETE FROM `catalog_product_entity` 

由於在Magento數據庫中設置的外鍵約束,其中包含產品信息的所有其他表格都會很好地清理。當然,需要一些時間來刪除很多產品,但至少可以很好地清理乾淨。

如果查詢不能因爲最長執行時間運行,你總是可以運行類似:

DELETE FROM `catalog_product_entity` LIMIT 10000 

更新: 這個邏輯也得到在Magento的核心使用,因此它是安全的使用! https://github.com/OpenMage/magento-mirror/blob/magento-1.8/app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php#L462

+0

這工作得很好,謝謝 – UltimateBrent 2013-02-12 01:06:42

+0

這不會刪除類別 – Nicola 2014-06-27 19:37:34

+4

事實上,它不,這是爲了刪除所有產品。 – 2014-06-30 08:58:26

12

在一個獨立的腳本:

<?php 
require 'app/Mage.php'; 
Mage::app('admin')->setUseSessionInUrl(false); 


$products = Mage::getModel('catalog/product')->getCollection();  
foreach ($products as $product) { 
    try { 
     $product->delete(); 
    } catch(Exception $e) { 
     echo "Product #".$product->getId()." could not be remvoved: ".$e->getMessage(); 
    } 
} 

難道,對於更多的產品1400,工作得很好。之後你必須重新馴服。

當心上面的腳本將刪除所有您的產品

+0

+1使用Magento腳本應該保留數據完整性,而不是攻擊數據庫,發現事情不起作用,並關閉完整性檢查以後發現事情真的不起作用。 – 2014-03-31 15:49:47

+0

可能產品的完整性問題 – 2014-04-06 15:39:44

+0

對於大量產品(~100000),腳本可以通過添加以下內容來改進:'ini_set(「memory_limit」,「2024M」); ini_set(「max_execution_time」,「86400」);''和'Mage :: log('刪除:'。product-> getId());'以獲得一些反饋。在屏幕上啓動它可能是有意義的。 – paderEpiktet 2016-03-21 15:29:12

2
Mage::getModel('catalog/product')->getCollection()->delete(); 
0

工作就像一個魅力...

PHP的myadmin - 在頂部選擇DATABSE(Magento的)SWL,然後粘貼以下內容:

DELETE FROM `catalog_product_entity` 
-4
SELECT * FROM `mage_catalog_product_entity` 

讓你列表當前有效的產品。

+1

不,它不。 「積極」可能暗示任何事情。你在這裏檢索的是你所有產品的清單。儘管如此,這與問題完全沒有關係。 – 2015-10-16 01:53:18

1

在Magento 1.7.0上測試。2

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_flat_1`; 
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_label`; 
TRUNCATE TABLE `catalog_product_super_attribute_pricing`; 
TRUNCATE TABLE `catalog_product_super_attribute`; 
TRUNCATE TABLE `catalog_product_super_link`; 
TRUNCATE TABLE `catalog_product_enabled_index`; 
TRUNCATE TABLE `catalog_product_website`; 
TRUNCATE TABLE `catalog_product_relation`; 
TRUNCATE TABLE `catalog_category_product_index`; 
TRUNCATE TABLE `catalog_category_product`; 
TRUNCATE TABLE `cataloginventory_stock_item`; 
TRUNCATE TABLE `cataloginventory_stock_status`; 
TRUNCATE TABLE `cataloginventory_stock_status_idx`; 
TRUNCATE TABLE `cataloginventory_stock`; 
TRUNCATE TABLE `core_url_rewrite`; 
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'); 
INSERT INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default'); 
TRUNCATE TABLE `catalog_product_entity`; 
SET FOREIGN_KEY_CHECKS = 1; 
+2

請不要使用將外鍵檢查設置爲0的查詢。查詢運行得更快,但是您冒着數據庫損壞的風險。 – 2014-10-16 19:02:18

+0

你不能用FK截斷,因爲imho mysql會刪除表並創建一個新表。 – 2016-08-25 13:01:46

0

在我看來,最簡潔的解決方案是這樣的:

  • 轉到System -> Index Management並設置所有索引「手動更新」索引模式
  • 轉到Catalog -> Manage Products,選擇所有產品,並使用Delete刪除所有產品的操作。

這並不像從數據庫中手動刪除產品那樣快,但它可能是刪除所有產品的最合適方法,您不必擔心孤立的數據庫條目或外鍵衝突。