কিভাবে ডাটাবেসের মাধ্যমে একটি সদৃশ স্কু অপসারণ?


12

অ্যাডমিনের মাধ্যমে আমার কয়েকটি ম্যাজেন্টো পণ্য সম্পাদনা করার এবং সংরক্ষণ করার চেষ্টা করার সময় আমি এই ত্রুটিটি পেয়েছি: " " এসকিউ "বৈশিষ্ট্যের মানটি অবশ্যই অনন্য হবে" "

আমি যখন ম্যাজেন্টো অ্যাডমিনে আমার পণ্যগুলি দেখি তখন একটি সদৃশ স্কু কোথাও পাওয়া যায় না, তবে আমি যখন পণ্য রফতানি করি তখন বাস্তবে একই স্কু সহ কিছু পণ্য থাকে। তাত্ত্বিকভাবে ম্যাজেন্টোকে কখনই এটি হওয়ার অনুমতি দেওয়া উচিত ছিল না, তবে হায়, আমি বেশিরভাগ বৃহত এবং পরিপক্ক (3+ বছর বয়সী) এমন একটি গ্রুপের সাথে কাজ করছি যা মনে হয় যে পূর্ববর্তী ম্যাজেন্টো বাগ এবং কোর্কগুলির অবশেষ বহন করে।

আমি এই সমস্যাটি সমাধানের একমাত্র উপায় অনুমান করছি হ'ল ম্যানুয়ালি ডাটাবেস থেকে একটি সদৃশ স্কু মুছে ফেলা, তবে আমি এটি করার সবচেয়ে ভাল / নিরাপদ উপায় সম্পর্কে নিশ্চিত নই। আমার কাছে ডাটাবেসের সাথে কাজ করার অভিজ্ঞতা রয়েছে 0, সুতরাং যে কোনও সহায়তা প্রশংসিত।

উত্তর:


7
  1. আপনার catalog_product_entityডাটাবেস টেবিলটির ব্যাকআপ দিন ( দেখুন: /programming//a/6683000/4457531 )

  2. সদৃশ স্কাসটি catalog_product_entityএই প্রশ্নের সাথে টেবিলে উপস্থাপিত হয়েছে কিনা তা পরীক্ষা করুন :

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
    
  3. সদৃশ এন্ট্রি সরান

    • নতুন সদৃশ পণ্যগুলি সরান এবং এর সাথে পুরানো স্কুকে রাখুন:

      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 মধ্যে subquery যোগদানের

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

3

আপনার কাছে সম্ভবত আপনার ডাটাবেসে সদৃশ এসকিউ রয়েছে না, আপনি রফতানি চালানোর সময় এগুলি কেবল ম্যাজেন্টো 1.9.2.x এ উপস্থিত হয়।

এটা চেষ্টা কর:

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

ম্যাজেন্টো কোর টিম এটি ঠিক না করা পর্যন্ত এটি একটি অস্থায়ী স্থিরতা


1

আপনাকে অপ্রত্যাশিত স্কাসটি তদন্ত করতে হবে এবং পরিষ্কার করতে হবে। প্রথমে সম্পর্কিত স্কুজটি সন্ধান করুন, তারপরে আপনাকে নীচের প্রশ্নের সাথে এটি ডাটাবেসে পরিষ্কার করতে হবে:

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

মনে রাখবেন যে আমি আপনাকে এটি করার পরামর্শ দিচ্ছি যদি আপনি যা করেন সে সম্পর্কে নিশ্চিত হন, এটি বিপরীত হবে না।


যে কোনও বুদ্ধিমান ক্যোয়ারী সরাসরি প্রয়োগ করার আগে আপনার
ডিবিটিকে

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

যে কোনও বুদ্ধিমান কোয়েরি সরাসরি প্রয়োগ করার আগে আপনার
ডিবিটিকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.