Bagaimana cara menghapus duplikat sku via database?


12

Saya mendapatkan kesalahan ini ketika mencoba mengedit dan menyimpan beberapa produk Magento saya melalui admin: " Nilai atribut" SKU "harus unik ."

Ketika saya melihat produk saya di admin Magento, duplikat sku tidak ditemukan, tetapi ketika saya menjalankan ekspor produk sebenarnya ada beberapa produk dengan sku yang sama. Secara teori, Magento seharusnya tidak membiarkan hal ini terjadi, tetapi sayangnya, saya berurusan dengan sekelompok produk yang cukup besar dan dewasa (3+ tahun) yang tampaknya membawa sisa-sisa bug dan keanehan Magento sebelumnya.

Saya menduga satu-satunya cara untuk memperbaiki masalah ini adalah dengan menghapus secara manual salah satu duplikat skus dari database, tapi saya tidak yakin tentang cara terbaik / teraman untuk melakukan ini. Saya punya banyak pengalaman bekerja dengan database, jadi bantuan apa pun sangat kami hargai.

Jawaban:


7
  1. Cadangkancatalog_product_entity tabel database Anda ( lihat: /programming//a/6683000/4457531 )

  2. Periksa apakah duplikat skus disajikan dalam catalog_product_entitytabel dengan kueri ini:

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
    
  3. Hapus entri duplikat

    • Hapus duplikat produk baru dan pertahankan sku yang lebih lama dengan:

      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
      
    • Untuk menghapus produk duplikat lama dan menyimpan sku baru , ganti MINdenganMAX dalam subquery gabung

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


1

Anda harus menyelidiki dan membersihkan skus yang tak terduga itu. Pertama temukan skus yang bersangkutan, maka Anda harus membersihkannya di database dengan permintaan di bawah ini:

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

perhatikan bahwa saya menyarankan Anda untuk melakukannya jika Anda yakin dengan apa yang Anda lakukan, ini tidak akan dapat dibalik.


Ingatlah untuk membuat cadangan db Anda sebelum menerapkan permintaan yang masuk akal secara langsung
Nolwennig

1

Silakan jalankan skrip di bawah ini melalui basis data

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

Ingatlah untuk membuat cadangan db Anda sebelum menerapkan permintaan yang masuk akal secara langsung
Nolwennig
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.