วิธีลบ sku ที่ซ้ำกันผ่านฐานข้อมูล


12

ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามแก้ไขและบันทึกผลิตภัณฑ์ Magento ของฉันบางส่วนผ่านผู้ดูแลระบบ: " ค่าแอตทริบิวต์" SKU "ต้องไม่ซ้ำกัน "

เมื่อฉันดูผลิตภัณฑ์ของฉันใน Magento ผู้ดูแลระบบ sku ที่ซ้ำกันจะไม่พบ แต่เมื่อฉันเรียกใช้การส่งออกผลิตภัณฑ์ในความเป็นจริงมีบางผลิตภัณฑ์ที่มี sku เดียวกัน ในทางทฤษฎีวีโอไอพีไม่ควรยอมให้สิ่งนี้เกิดขึ้น แต่อนิจจาฉันกำลังจัดการกับกลุ่มผลิตภัณฑ์ที่ค่อนข้างใหญ่และเป็นผู้ใหญ่ (อายุ 3 ปีขึ้นไป) ที่ดูเหมือนจะพกเศษซากของแมลงและวีโอไอพีมาก่อน

ฉันเดาว่าวิธีเดียวที่จะแก้ไขปัญหานี้คือการลบ skus ที่ซ้ำกันหนึ่งรายการออกจากฐานข้อมูลด้วยตนเอง แต่ฉันไม่แน่ใจว่าวิธีที่ดีที่สุด / ปลอดภัยที่สุดในการทำเช่นนี้ ฉันมีประสบการณ์ทำงานกับฐานข้อมูลค่อนข้าง 0 ดังนั้นความช่วยเหลือใด ๆ ที่ชื่นชม

คำตอบ:


7
  1. สำรองcatalog_product_entityตารางฐานข้อมูลของคุณ( ดู: /programming//a/6683000/4457531 )

  2. ตรวจสอบว่ามี skus ที่ซ้ำกันอยู่ในcatalog_product_entityตารางด้วยแบบสอบถามนี้หรือไม่:

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. ลบรายการที่ซ้ำกัน

    • ลบผลิตภัณฑ์ที่ซ้ำกันใหม่และเก็บ sku ที่เก่ากว่าด้วย:

      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
    • ในการลบผลิตภัณฑ์ที่ซ้ำกันเก่าและเก็บ sku ใหม่ให้แทนที่MINด้วยMAXในการเข้าร่วมแบบสอบถามย่อย

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

3

คุณอาจไม่มี SKU ที่ซ้ำกันในฐานข้อมูลของคุณจะปรากฏเฉพาะใน magento 1.9.2.x เมื่อคุณเรียกใช้การส่งออก

ลองสิ่งนี้:

https://github.com/baconl/Magento-1.9.2.1-duplicate-sku-fix

มันเป็นการชั่วคราวจนกว่าทีมวีโอไอพีจะทำการแก้ไข


1

คุณจะต้องตรวจสอบและทำความสะอาด skus ที่ไม่คาดคิดเหล่านั้น ก่อนอื่นให้ค้นหา skus ที่เกี่ยวข้องจากนั้นคุณจะต้องทำความสะอาดในฐานข้อมูลด้วยแบบสอบถามด้านล่าง:

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

โปรดทราบว่าฉันแนะนำให้คุณทำหากคุณแน่ใจในสิ่งที่คุณทำสิ่งนี้จะไม่สามารถย้อนกลับได้


โปรดทราบว่าคุณควรสำรองฐานข้อมูลของคุณก่อนที่จะใช้แบบสอบถามที่มีเหตุผลโดยตรง
Nolwennig

1

กรุณาเรียกใช้สคริปต์ร้องผ่านฐานข้อมูล

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

โปรดทราบว่าคุณควรสำรองฐานข้อมูลของคุณก่อนที่จะใช้การค้นหาที่สมเหตุสมผลโดยตรง
Nolwennig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.