データベースを介して重複したSKUを削除するにはどうすればよいですか?


12

adminを介していくつかのMagento製品を編集して保存しようとすると、「属性「SKU」の値は一意でなければなりません。」というエラーが表示されます。

Magento adminで製品を表示すると、重複するskuが見つかりませんが、製品のエクスポートを実行すると、実際には同じskuの製品がいくつかあります。理論的には、Magentoはこれを決して許してはいけませんでしたが、残念ながら、以前のMagentoのバグや癖の残骸を運んでいると思われるかなり大きく成熟した(3歳以上)製品グループを扱っています。

この問題を解決する唯一の方法は、データベースから重複するスカルの1つを手動で削除することであると推測していますが、これを行うための最良/安全な方法はわかりません。データベースの操作経験はほとんどありませんので、ご協力をお願いします。

回答:


7
  1. catalog_product_entityデータベーステーブルをバックアップします(/programming//a/6683000/4457531を参照

  2. catalog_product_entity次のクエリを使用して、テーブルに重複するSkusが存在するかどうかを確認します。

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. 重複したエントリを削除する

    • 重複する新しい製品を削除、古い SKUを保持します。

      DELETE catalog_product_entity FROM catalog_product_entity
      LEFT OUTER JOIN (
          SELECT MIN(entity_id) as id, sku
          FROM catalog_product_entity
          GROUP BY sku
      ) as t1
      ON catalog_product_entity.entity_id = t1.id
      WHERE t1.id IS NULL
    • 古い重複製品を削除て新しい SKU を保持するには、joinサブクエリで置き換えますMINMAX

      LEFT OUTER JOIN (
          SELECT MAX(entity_id) as id, sku
          ...
      )


1

これらの予期しない頭蓋骨を調査し、きれいにする必要があります。最初に関係するスカスを見つけてから、以下のクエリを使用してデータベースでそれをきれいにする必要があります。

DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ..., 'SKU1654');

あなたが何をするか確信があるなら、それを行うことをお勧めします。これは元に戻せません。


賢明なクエリを直接適用する前にデータベースをバックアップすることを
忘れ

1

データベース経由で以下のスクリプトを実行してください

DELETE FROM `catalog_product_entity` WHERE `entity_id` IN (SELECT *  FROM (SELECT `entity_id` FROM `catalog_product_entity` GROUP BY `sku` HAVING (COUNT(*) > 1)) AS A);

賢明なクエリを直接適用する前にデータベースをバックアップすることを
忘れ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.