關於Magento上的這個問題有很多帖子。他們大多數工作,但在執行刪除代碼/ SQL語句後,類別沒有將其值重置爲零的問題仍然存在,直到現在還沒有解決。刪除Magento上的所有產品
這裏有沒有人有正確的代碼或過程來正確刪除清單中的所有產品,並且在執行它後類別列表也重置爲零?
在此先感謝。
關於Magento上的這個問題有很多帖子。他們大多數工作,但在執行刪除代碼/ SQL語句後,類別沒有將其值重置爲零的問題仍然存在,直到現在還沒有解決。刪除Magento上的所有產品
這裏有沒有人有正確的代碼或過程來正確刪除清單中的所有產品,並且在執行它後類別列表也重置爲零?
在此先感謝。
無論用於刪除產品的方法如何,重建「類別產品」索引都應修復計數。進入系統>索引管理。選中「類別產品」旁邊的框,將操作(右上角)更改爲「Reindex」,然後單擊「提交」。
我改變了主意。爲了那些有類似問題的人的利益,我選擇這個作爲最合適的答案。 – 2013-02-21 01:19:30
爲了刪除產品,您可以簡單地使用後端:
目錄>管理產品>選擇所有checboxes,然後選擇Action = Delete並點擊提交。
這可能對數千種產品非常有用。
謝謝。這對400,000 ++產品如何工作? – 2012-01-17 20:28:25
對於那麼多的產品來說,它會非常慢並且內存/服務器超時問題。 – MagePsycho 2012-01-18 16:53:08
要刪除所有產品,您可以使用此查詢:
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');
問候:)
由於數據完整性問題,此查詢不起作用。它顯示錯誤'#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
在上面的代碼頂部添加'SET FOREIGN_KEY_CHECKS = 0;'並添加'SET FOREIGN_KEY_CHECKS = 1;'底部代碼。 – Zaheerabbas 2013-11-26 05:17:00
刪除檢查數據完整性,交叉手指,並希望數據損壞不會繼續='SET FOREIGN_KEY_CHECKS = 0;' – 2014-03-31 15:21:38
刪除從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
這工作得很好,謝謝 – UltimateBrent 2013-02-12 01:06:42
這不會刪除類別 – Nicola 2014-06-27 19:37:34
事實上,它不,這是爲了刪除所有產品。 – 2014-06-30 08:58:26
在一個獨立的腳本:
<?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,工作得很好。之後你必須重新馴服。
當心上面的腳本將刪除所有您的產品
+1使用Magento腳本應該保留數據完整性,而不是攻擊數據庫,發現事情不起作用,並關閉完整性檢查以後發現事情真的不起作用。 – 2014-03-31 15:49:47
可能產品的完整性問題 – 2014-04-06 15:39:44
對於大量產品(~100000),腳本可以通過添加以下內容來改進:'ini_set(「memory_limit」,「2024M」); ini_set(「max_execution_time」,「86400」);''和'Mage :: log('刪除:'。product-> getId());'以獲得一些反饋。在屏幕上啓動它可能是有意義的。 – paderEpiktet 2016-03-21 15:29:12
Mage::getModel('catalog/product')->getCollection()->delete();
工作就像一個魅力...
PHP的myadmin - 在頂部選擇DATABSE(Magento的)SWL,然後粘貼以下內容:
DELETE FROM `catalog_product_entity`
SELECT * FROM `mage_catalog_product_entity`
讓你列表當前有效的產品。
不,它不。 「積極」可能暗示任何事情。你在這裏檢索的是你所有產品的清單。儘管如此,這與問題完全沒有關係。 – 2015-10-16 01:53:18
在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;
請不要使用將外鍵檢查設置爲0的查詢。查詢運行得更快,但是您冒着數據庫損壞的風險。 – 2014-10-16 19:02:18
你不能用FK截斷,因爲imho mysql會刪除表並創建一個新表。 – 2016-08-25 13:01:46
在我看來,最簡潔的解決方案是這樣的:
System -> Index Management
並設置所有索引「手動更新」索引模式Catalog -> Manage Products
,選擇所有產品,並使用Delete
刪除所有產品的操作。這並不像從數據庫中手動刪除產品那樣快,但它可能是刪除所有產品的最合適方法,您不必擔心孤立的數據庫條目或外鍵衝突。
你的意思是身份證號碼?你必須重置表的auto_increment主鍵。 – 2012-01-17 18:02:52
不,我正在計算每個類別下的產品數量。 – 2012-01-17 18:21:41