Como remover um sku duplicado via banco de dados?


12

Eu recebo este erro ao tentar editar e salvar alguns dos meus produtos Magento via admin: " O valor do atributo" SKU "deve ser exclusivo ."

Quando visualizo meus produtos no Magento admin, não é possível encontrar um sku duplicado, mas quando executo uma exportação de produto, na verdade existem alguns produtos com o mesmo sku. Em teoria, o Magento nunca deveria ter permitido que isso acontecesse, mas, infelizmente, estou lidando com um grupo de produtos bastante grande e maduro (com mais de 3 anos) que parece conter os restos de bugs e peculiaridades anteriores do Magento.

Acho que a única maneira de corrigir esse problema é remover manualmente um dos skus duplicados do banco de dados, mas não tenho certeza da melhor / mais segura maneira de fazer isso. Eu tenho praticamente 0 experiência trabalhando com bancos de dados, então qualquer ajuda é apreciada.

Respostas:


7
  1. Backup de seu catalog_product_entitybanco de dados tabela ( ver: /programming//a/6683000/4457531 )

  2. Verifique se skus duplicados estão presentes na catalog_product_entitytabela com esta consulta:

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. Remover entradas duplicadas

    • Remova novos produtos duplicados e mantenha o sku mais antigo com:

      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
    • Para remover produtos duplicados antigos e manter o novo sku, substitua MINporMAX na subconsulta join

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


1

Você precisará investigar e limpar os esquis inesperados. Primeiro encontre o skus em questão, então você precisará limpá-lo no banco de dados com a consulta abaixo:

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

observe que eu recomendo que você faça isso se tiver certeza do que faz, isso não será reversível.


Tenha em mente para fazer backup de seu db antes de aplicar qualquer consulta sensata diretamente
Nolwennig

1

Por favor, execute o script abaixo através do banco de dados

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

Tenha em mente para fazer backup de seu db antes de aplicar qualquer consulta sensata diretamente
Nolwennig
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.