关于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