Wie entferne ich eine doppelte SKU über die Datenbank?


12

Ich erhalte diese Fehlermeldung, wenn ich versuche, einige meiner Magento-Produkte über den Administrator zu bearbeiten und zu speichern: " Der Wert des Attributs" SKU "muss eindeutig sein ."

Wenn ich meine Produkte in Magento Admin ansehe, ist ein doppeltes SKU nirgends zu finden, aber wenn ich einen Produktexport durchführe, gibt es tatsächlich einige Produkte mit demselben SKU. Theoretisch hätte Magento dies niemals zulassen dürfen, aber leider habe ich es mit einer ziemlich großen und ausgereiften (3+ Jahre alten) Produktgruppe zu tun, die die Überreste früherer Magento-Bugs und Macken zu tragen scheint.

Ich vermute, die einzige Möglichkeit, dieses Problem zu beheben, besteht darin, einen der doppelten Skus manuell aus der Datenbank zu entfernen. Ich bin mir jedoch nicht sicher, wie dies am besten / sichersten funktioniert. Ich habe so ziemlich keine Erfahrung in der Arbeit mit Datenbanken, daher ist jede Hilfe willkommen.

Antworten:


7
  1. Sichern Sie Ihre catalog_product_entityDatenbanktabelle ( siehe: /programming//a/6683000/4457531 )

  2. Überprüfen Sie catalog_product_entitymit dieser Abfrage, ob doppelte Skus in der Tabelle vorhanden sind :

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. Doppelte Einträge entfernen

    • Entfernen Sie neue doppelte Produkte und bewahren Sie ältere Artikel auf mit:

      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
    • Um alte doppelte Produkte zu entfernen und neue SKUs beizubehalten , ersetzen Sie diese MINdurchMAX in der Join-Unterabfrage

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


1

Sie müssen diesen unerwarteten Skus untersuchen und reinigen. Suchen Sie zuerst den betreffenden Skus, dann müssen Sie ihn in der Datenbank mit der folgenden Abfrage bereinigen:

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

Beachten Sie, dass ich Ihnen empfehle, dies zu tun, wenn Sie sicher sind, was Sie tun. Dies ist nicht umkehrbar.


Denken Sie daran, Ihre Datenbank zu sichern, bevor Sie eine sinnvolle Abfrage direkt anwenden
Datenbank anwenden

1

Bitte führen Sie das folgende Skript über die Datenbank aus

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

Denken Sie daran, Ihre
Datenbank
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.