Làm thế nào để loại bỏ một sku trùng lặp thông qua cơ sở dữ liệu?


12

Tôi gặp lỗi này khi cố gắng chỉnh sửa và lưu một vài sản phẩm Magento của mình thông qua quản trị viên: " Giá trị của thuộc tính" SKU "phải là duy nhất ."

Khi tôi xem các sản phẩm của mình trong quản trị viên Magento, không tìm thấy sku trùng lặp, nhưng khi tôi chạy một sản phẩm xuất khẩu, thực tế có một số sản phẩm có cùng sku. Về lý thuyết, Magento không bao giờ nên cho phép điều này xảy ra, nhưng than ôi, tôi đang đối phó với một nhóm sản phẩm khá lớn và trưởng thành (trên 3 tuổi) dường như mang theo tàn dư của các lỗi và quirks Magento trước đây.

Tôi đoán cách duy nhất để khắc phục vấn đề này là xóa thủ công một trong các skus trùng lặp khỏi cơ sở dữ liệu, nhưng tôi không chắc chắn về cách tốt nhất / an toàn nhất để làm điều này. Tôi có khá nhiều kinh nghiệm 0 làm việc với cơ sở dữ liệu, vì vậy bất kỳ trợ giúp đều được đánh giá cao.

Câu trả lời:


7
  1. Sao lưucatalog_product_entity bảng cơ sở dữ liệu của bạn ( xem: /programming//a/6683000/4457531 )

  2. Kiểm tra nếu skus trùng lặp được trình bày trong catalog_product_entitybảng với truy vấn này:

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. Xóa các mục trùng lặp

    • Xóa các sản phẩm trùng lặp mớigiữ sku cũ hơn với:

      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
    • Để xóa các sản phẩm trùng lặp giữ sku mới , thay thế MINbằngMAX truy vấn phụ

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


1

Bạn sẽ cần phải điều tra và làm sạch những skus bất ngờ. Trước tiên hãy tìm skus liên quan, sau đó bạn sẽ cần xóa nó trong cơ sở dữ liệu với truy vấn bên dưới:

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

lưu ý rằng tôi khuyên bạn nên làm điều đó nếu bạn chắc chắn về những gì bạn làm, điều này sẽ không thể đảo ngược.


Hãy ghi nhớ để sao lưu db của bạn trước khi áp dụng trực tiếp bất kỳ truy vấn hợp lý nào
Nolwennig

1

Vui lòng chạy tập lệnh dưới đây thông qua cơ sở dữ liệu

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

Hãy ghi nhớ để sao lưu db của bạn trước khi áp dụng trực tiếp bất kỳ truy vấn hợp lý nào
Nolwennig
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.