首页 文章

Magento - 如何清除属性集中没有的属性

提问于
浏览
2

我正在接管另一个开发人员的网站,并发现属性的设置有点混乱 .

具体而言,产品具有与相关属性集无关的属性 .

如果你带的葡萄酒的属性设置为“葡萄酒”,其中一个属性是“葡萄品种” .

但我也有“Beers”,它们具有完全不同的属性集,但不知怎的,我的啤酒之一有葡萄品种 .

它没有分配给Beers属性集,它没有出现在这个产品的后端(所以我无法编辑它)但是如果我查看数据库它(在catalog_product_entity_ *和catalog_product_index_eav中)当我进行出口时它也在那里,如果有人搜索“梅洛”,他们就会拿出这种啤酒 . 有数百种这样的产品 .

从不在其指定属性集中的产品中删除所有属性的最佳方法是什么?

我可以在SQL中弄清楚我确定,但这不是最好的做事方式,因为我害怕丢失一些东西并完全搞砸了产品 .

2 回答

  • 0

    这就是我最终做的事情 . 几个星期后,似乎还没有引起任何问题:

    CREATE TABLE catalog_product_entity_int_old LIKE catalog_product_entity_int;
    INSERT INTO catalog_product_entity_int_old SELECT * FROM catalog_product_entity_int;
    
    DELETE FROM catalog_product_entity_int 
        WHERE value_id IN 
            (SELECT cpei.value_id 
                FROM catalog_product_entity_int_old cpei 
                WHERE cpei.attribute_id NOT IN 
                    (SELECT eea.attribute_id 
                        FROM eav_entity_attribute eea 
                            JOIN catalog_product_entity cpe ON eea.attribute_set_id = cpe.attribute_set_id 
                        WHERE cpe.entity_id = cpei.entity_id) 
            ORDER BY cpei.entity_id)
    

    DELETE FROM catalog_product_index_eav WHERE
    attribute_id NOT IN (
        (SELECT eea.attribute_id 
        FROM eav_entity_attribute eea 
            JOIN catalog_product_entity cpe ON eea.attribute_set_id = cpe.attribute_set_id 
        WHERE cpe.entity_id = catalog_product_index_eav .entity_id) 
    );
    

    然后重新生成索引 .

  • 3

    我肯定会使用Magmi来清理它:

    首先,从Magento内部进行产品导出(系统 - >导入/导出 - >配置文件),然后选择“导出所有产品” . 在生成的CSV中,您将拥有每个属性的列,并且可以删除每个产品的任何不相关的属性值 . 这将允许您绕过为特定产品设置属性但不在产品属性集中设置属性的后端 .

    Take a good look at the Magmi Wiki, but a few quick tips: Magmi仅导入您指定的列,因此您可以在执行导入时安全地删除大多数列 . 例如,如果我没有导入图像(或者您可能丢失所有图像),我总是确保删除图像列 . 此外,在运行导入之前,请务必进行数据库备份,以防出现问题 .

相关问题