【问题标题】:Deleting ALL products on Magento删除 Magento 上的所有产品
【发布时间】:2012-01-17 17:58:06
【问题描述】:

Magento 上有很多关于这个问题的帖子。它们中的大多数都可以工作,但是在执行删除代码/SQL 语句后,类别未将其值重置为零的问题仍然存在,直到现在还没有得到解决。

这里有没有人有正确的代码或程序来正确地从库存中删除所有产品,并在执行后将类别列表也重置为零?

提前致谢。

【问题讨论】:

  • 你是说身份证号码?您必须重置表的 auto_increment 主键。
  • 没有。我与每个类别下的产品数量有关。

标签: php mysql magento


【解决方案1】:

从 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

【讨论】:

  • 这不会删除类别
  • 确实没有,这是要删除所有产品。
  • 要删除类别,请使用:DELETE FROM catalog_category_entity;
  • 这必须是最佳答案。
  • 我不会运行DELETE FROM catalog_category_entity;,因为它会删除您的根类别,导致您有些悲伤。也许使用DELETE FROM catalog_category_entity WHERE level != 0
【解决方案2】:

在独立脚本中:

<?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 脚本,它应该保持数据完整性而不是攻击数据库,发现事情不工作并关闭完整性检查以稍后发现事情真的不工作。跨度>
  • 5 月产品的完整性问题
  • 对于更大数量的产品(~ 100000),可以通过添加:ini_set("memory_limit", "2024M"); ini_set("max_execution_time", "86400"); 和 `Mage::log('to delete: ' . $product-> getId()) 来改进脚本;` 一些反馈。在屏幕中启动它可能很有意义。
【解决方案3】:

无论用于删除产品的方法如何,重建“类别产品”索引都应该修复计数。进入系统 > 索引管理。选中“类别产品”旁边的框,将操作(右上角)更改为“重新索引”并点击提交。

【讨论】:

  • 我改变了主意。为了那些有类似问题的人的利益,我选择这个作为最合适的答案。
【解决方案4】:

要删除所有产品,您可以使用此查询:

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 - Cannot truncate a table referenced in a foreign key constraint (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) REFERERENCES @98765432766有什么办法解决吗?
  • 在上述代码顶部添加SET FOREIGN_KEY_CHECKS=0;,在代码底部添加SET FOREIGN_KEY_CHECKS=1;
  • 删除数据完整性检查,交叉手指,希望不会发生数据损坏 = SET FOREIGN_KEY_CHECKS=0;
【解决方案5】:

为了删除产品,您可以简单地使用后端:
目录 > 管理产品 > 选择所有复选框并选择操作 = 删除并点击提交。
这可能对数千种产品非常有效。

【讨论】:

  • 好吧,对于这么多产品,它真的很慢而且内存/服务器超时问题。
【解决方案6】:
Mage::getModel('catalog/product')->getCollection()->delete();

【讨论】:

    【解决方案7】:

    工作就像一个魅力......

    Php myadmin - 在顶部选择数据库(magento)SWL,然后粘贴以下内容:

    DELETE FROM `catalog_product_entity`
    

    【讨论】:

      【解决方案8】:

      在 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 的查询。查询运行得更快,但您有数据库损坏的风险。
      • 你不能在 FK 开启的情况下截断,因为 imho mysql 会删除表并创建一个新表。
      【解决方案9】:

      我认为最干净的解决方案是:

      • 转到System -&gt; Index Management 并将所有索引设置为“手动更新”索引模式
      • 转到Catalog -&gt; Manage Products,选择所有产品并使用Delete 操作删除所有产品。

      这不如手动从数据库中删除产品快,但它可能是删除所有产品的最快正确方法,您不必担心孤立的数据库条目或外键冲突。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-11
        • 1970-01-01
        相关资源
        最近更新 更多