Come rimuovere uno sku duplicato tramite il database?


12

Ottengo questo errore quando provo a modificare e salvare alcuni dei miei prodotti Magento tramite admin: " Il valore dell'attributo" SKU "deve essere univoco ."

Quando visualizzo i miei prodotti nell'amministratore di Magento non è possibile trovare uno sku duplicato, ma quando eseguo un'esportazione di un prodotto ci sono in effetti alcuni prodotti con lo stesso sku. In teoria Magento non avrebbe mai dovuto permettere che ciò accadesse, ma ahimè, ho a che fare con un gruppo abbastanza grande e maturo (di età superiore ai 3 anni) che sembra contenere i resti di bug e stranezze precedenti di Magento.

Immagino che l'unico modo per risolvere questo problema sia rimuovere manualmente uno degli skus duplicati dal database, ma non sono sicuro del modo migliore / più sicuro per farlo. Ho quasi 0 esperienza di lavoro con i database, quindi qualsiasi aiuto è apprezzato.

Risposte:


7
  1. Eseguire il backup della catalog_product_entitytabella del database ( consultare: /programming//a/6683000/4457531 )

  2. Controlla se skus duplicati sono presenti nella catalog_product_entitytabella con questa query:

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. Rimuovi voci duplicate

    • Rimuovi nuovi prodotti duplicati e mantieni lo sku più vecchio con:

      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
    • Per rimuovere vecchi prodotti duplicati e mantenere nuovi sku, sostituisci MINconMAX in subquery join

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


1

Dovrai investigare e pulire quegli skus inaspettati. Per prima cosa trova lo skus in questione, quindi dovrai pulirlo nel database con la query di seguito:

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

nota che ti consiglio di farlo se sei sicuro di ciò che fai, questo non sarà reversibile.


Ricorda di eseguire il backup del tuo db prima di applicare direttamente qualsiasi query ragionevole
Nolwennig

1

Si prega di eseguire il seguente script tramite il database

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

Ricorda di eseguire il backup del tuo db prima di applicare direttamente qualsiasi query ragionevole
Nolwennig,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.