2013-09-30 29 views
2

我從另一位開發人員手中接過一個網站,發現屬性的設置有點亂。Magento - 如何清理不屬性集中的屬性

具體而言,產品具有與相關屬性集無關的屬性。

如果您將葡萄酒的屬性設置爲「葡萄酒」,其中一個屬性爲「葡萄品種」。

但我也有一個完全不同的屬性集「啤酒」,但不知何故我的一個啤酒有一個葡萄品種。

它沒有分配到Beers屬性集,它不會顯示在本產品的後端(所以我不能編輯它),但是如果我查看數據庫,它就在那裏(在catalog_product_entity_ *和catalog_product_index_eav),而且當我做出口時,它也在那裏,如果有人搜索「美樂」,他們會拿出這款啤酒。有數百種這樣的產品。

從不屬於其指定屬性集的產品中刪除所有屬性的最佳方法是什麼?

我可以在SQL中弄明白,但我不確定,但這不是做事的最佳方式,因爲我害怕錯過某些東西並完全搞砸了產品。

+0

如果僅僅是將它分配給錯誤的屬性集,那麼有些模塊可以讓您非常簡單地在沒有SQL垃圾箱潛水的產品上更改屬性集。阿馬斯蒂的羣衆行動就是這樣。 –

+0

謝謝,但它被分配了正確的屬性集。我的觀點是,有些屬性不屬於仍然分配給該產品的屬性集。 – colmde

+1

好吧,孤立的屬性條目... –

回答

3

這就是我最終做的。幾個星期後,它似乎並沒有引起任何問題,但:

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) 
); 

然後重新生成索引。

+2

該解決方案仍然工作在Magento 2.1。對於2.1 EE,'entity_id'應該是第一個查詢集中的'row_id'(由於內容分段)。 –

0

我肯定會用Magmi清理它:「導出所有產品」

首先,從內部的Magento做產品出口(系統 - - >導入/導出>配置文件),然後選擇在生成的CSV中,每個屬性都有列,您可以刪除每個產品的任何不相關的屬性值。這將允許您繞過爲特定產品設置屬性的後端,而不是在產品的屬性集中。

請仔細看看Magmi Wiki,但有一些快速提示: Magmi只會導入您指定的列,因此您可以在執行導入時安全地刪除大部分列。例如,如果我不導入圖像(或者您可能會丟失所有圖像),我總是確保刪除圖像列。另外,請確保在運行導入之前執行數據庫備份,以防出現問題。