Як видалити дублікат sku через базу даних?


12

Я отримую цю помилку при спробі редагування та збереження декількох моїх продуктів Magento через адміністратора: " Значення атрибута" SKU "повинно бути унікальним ."

Коли я переглядаю свої продукти в адміністраторі Magento, то дубліката ску ніде не знайдено, але коли я запускаю експорт товару, насправді є деякі продукти з такою ж скупою. Теоретично Magento ніколи не повинен був допустити, щоб це сталося, але, на жаль, я маю справу з досить великою та зрілою (3+-річна) група продуктів, яка, здається, містить залишки попередніх помилок та примх Magento.

Я здогадуюсь, єдиний спосіб виправити цю проблему - це вручну видалити один із дублюючих скасів із бази даних, але я не впевнений у найкращому / найбезпечнішому способі це зробити. У мене майже 0 досвіду роботи з базами даних, тому будь-яка допомога вдячна.

Відповіді:


7
  1. Створення резервних копій вашої catalog_product_entityтаблиці бази даних ( див /programming//a/6683000/4457531 )

  2. Перевірте, чи представлені дублікати скісу в catalog_product_entityтаблиці з цим запитом:

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. Видаліть повторювані записи

    • Видаліть нові дублікати продуктів і збережіть старіші :

      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, замініть MINнаMAX підпит на приєднання

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


1

Вам потрібно буде дослідити та очистити ці несподівані скиси. Спочатку знайдіть відповідний скіс, потім вам потрібно буде очистити його в базі даних із запитом нижче:

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

зауважте, що я рекомендую вам це зробити, якщо ви впевнені в тому, що робите, це не буде оборотним.


Майте на увазі, щоб створити резервну копію вашого DB перед тим, як застосувати будь-який розумний запит безпосередньо
Nolwennig

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

Майте на увазі, щоб створити резервну копію вашого DB перед тим, як застосувати будь-який розумний запит безпосередньо
Nolwennig
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.