Veritabanı üzerinden yinelenen bir sku nasıl kaldırılır?


12

Magento ürünlerimden birkaçını yönetici aracılığıyla düzenlemeye ve kaydetmeye çalışırken bu hatayı alıyorum: " " SKU "özelliğinin değeri benzersiz olmalıdır ."

Magento admin'de ürünlerimi gördüğümde yinelenen bir sku bulunamıyor, ancak bir ürün ihracatı çalıştırdığımda aslında aynı sku'ya sahip bazı ürünler var. Teorik olarak Magento bunun olmasına asla izin vermemeliydi, ama ne yazık ki, önceki Magento böceklerinin ve tuhaflıklarının kalıntılarını taşıyor gibi görünen oldukça büyük ve olgun (3+ yaş) bir ürün grubuyla uğraşıyorum.

Ben bu sorunu düzeltmek için tek yolu el ile yinelenen skus birini veritabanından kaldırmak olduğunu tahmin ediyorum, ama bunu yapmak için en iyi / en güvenli yoldan emin değilim. Ben veritabanları ile çalışma hemen hemen 0 deneyime sahip, bu yüzden herhangi bir yardım takdir edilmektedir.

Yanıtlar:


7
  1. Yedekleme sizin catalog_product_entityveritabanı tablosu ( bkz: /programming//a/6683000/4457531 )

  2. catalog_product_entityAşağıdaki sorgu ile tabloda yinelenen skus olup olmadığını kontrol edin :

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
    
  3. Yinelenen girişleri kaldır

    • Yeni yinelenen ürünleri kaldırın ve aşağıdakileri yaparak eski sku'yu koruyun

      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
      
    • To eski kaldırmak yinelenen ürünler ve yeni tutmak , SKU yerine MINgöreMAX de alt sorgu katılmak

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


1

Bu beklenmedik skusları araştırmanız ve temizlemeniz gerekir. Önce ilgili skus'u bulun, sonra aşağıdaki sorgu ile veritabanında temizlemeniz gerekir:

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

ne yaptığınızdan eminseniz bunu yapmanızı tavsiye ederim, bu geri alınamaz.


Doğrudan herhangi bir anlamlı sorgu uygulamadan önce db yedekleme unutmayın
Nolwennig

1

Lütfen aşağıdaki komut dosyasını veritabanı üzerinden çalıştırın

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

Herhangi bir anlamlı sorguyu doğrudan uygulamadan önce
db'nizi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.