0

我的 magento 数据库中有大约 800,000 个产品,我需要删除其中大约一半的产品(大约 400,000 个)。

在 magento 1.7.0.2 上运行

从“管理产品”页面上做这件事只需要我永远。该过程需要很长时间,并且服务器不断超时。

是否有可以从数据库中删除选定产品的 SQL 语句?所有需要删除的产品,标题以*NLA开头

我知道磁电机将产品数据存储在几个不同的表中,所以我试图弄清楚如何从所有表中删除与所选产品相关的所有数据。

我知道 MySQL 语句,但我不是专家,无法弄清楚这一点。例如,如果只有一张表,我会这样做:DELETE FROM product_table WHERE title_value LIKE '*NLA%'

如果有人能指出我正确的方向,我将不胜感激。

4

3 回答 3

1

您可以使用此查询

DELETE FROM product_table WHERE title_value LIKE '*NLA%

Magento 使用带有外键的 MySQL 的 InnoDB 引擎存储。所有具有 FK 键的数据也将被删除。

于 2013-03-14T18:30:58.390 回答
0

在 Magento 中,产品详细信息使用 EAV 概念存储在数据库中,因此有 30 多个表可以存放产品数据。

我建议您使用 Magento 导入导出工具进行批量删除。

请参阅此链接: magento:通过导入/导出工具批量删除产品?

有一个扩展 Magmi 也可以使用。

于 2013-03-14T20:37:49.540 回答
0

SQL如果您要从单个表中删除,您的语句应该可以完成这项工作。

如果存储在不同的表上,则取决于它们的存储方式。例如,如果产品根据它们的键为 a 存储foreign key在不同的表中,那么当产品从主表中删除时,所有相关表都会更新(取决于是否设置了外键CASCADE ON DELETE)。

但要注意LIKE条件中给出的正则表达式,确保没有其他产品在其标题中的某处有“NLA”。

编辑:你说从'NAL'开始?在这种情况下,您的正则表达式应该类似于'NAL*%'

DELETE FROM product_table WHERE title LIKE 'NAL*%'
于 2013-03-14T18:30:12.733 回答