มีวิธีใดที่จะลบผลิตภัณฑ์หลายรายการด้วยการกรองด้วย SKU หรือไม่ ฉันมีผลิตภัณฑ์ประมาณ 1,000 รายการที่ฉันต้องการลบ
มีวิธีใดที่จะลบผลิตภัณฑ์หลายรายการด้วยการกรองด้วย SKU หรือไม่ ฉันมีผลิตภัณฑ์ประมาณ 1,000 รายการที่ฉันต้องการลบ
คำตอบ:
วิธีที่เร็วที่สุดที่จะทำคือเรียกใช้แบบสอบถามนี้โดยตรง
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
ทุกอย่างควรจะเป็นอย่างดี ค่าแอททริบิวจะถูกลบความสัมพันธ์ของหมวดหมู่จะถูกลบอัพเซลโลภกากบาทและที่เกี่ยวข้องเป็นต้น
[แก้ไข]
มีสิ่งที่จับได้ ขอบคุณ STW สำหรับการตรวจจับสิ่งนี้ ความเห็นและการให้คะแนนจะยังคงอยู่กับเด็กกำพร้าเนื่องจากไม่มีรหัสต่างประเทศในตารางผลิตภัณฑ์สำหรับพวกเขา
->delete()
แต่จะหลบการฟังรหัสใด ๆ สำหรับเหตุการณ์ ในสต็อก Magento ดูเหมือนว่าความคิดเห็นและการให้คะแนนจะถูกกำพร้า (พวกเขาจะไม่ถูกลบเมื่อผลิตภัณฑ์ที่เกี่ยวข้องของพวกเขา)
catalog_product_entity_*
ตารางทั้งหมดมี FK บนentity_id
สนามไปยังcatalog_product_entity.entity_id
สนาม พวกเขาควรตกลงอย่างสวยงาม
ทุกคนเคารพ Marius แต่โปรดอย่าโต้ตอบกับฐานข้อมูลโดยตรงหากหลีกเลี่ยงได้ อาจมีการอัปเดตตารางที่เกี่ยวข้องโดยอัตโนมัติหากการเปิดตัว Magento ของคุณและส่วนขยายทั้งหมดของคุณปราศจากข้อผิดพลาดในทุกสถานที่ที่เหมาะสม แต่ถ้าไม่ใช่สิ่งนั้นอาจทำลายเว็บไซต์ของคุณได้
แต่คุณสามารถใช้คุณสมบัตินำเข้า CSV ของ Magento ได้
เพียงแสดงรายการ SKU ของคุณในไฟล์ง่ายๆเพียง:
sku
ABC1
ABC2
ABC3
... ฯลฯ จากนั้นบันทึกเป็นไฟล์ CSV
จากนั้นในระบบ> นำเข้า / ส่งออก> นำเข้าเลือกประเภทเอนทิตี: ผลิตภัณฑ์และพฤติกรรมการนำเข้า: ลบเอนทิตีและนำเข้าไฟล์นี้ และนั่นมัน!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
คุณสามารถทำได้โดยทางโปรแกรม สร้าง skustodelete.csv แสดงรายการ skus ทั้งหมดที่จะถูกลบและหลังจากนั้นนี่คือรหัสเพื่อดำเนินการต่อไป
require_once 'app/Mage.php';
Mage :: app("default")->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);
$skuAll = array();
$file_handle = fopen("skustodelete.csv", "r");
$catalog = Mage::getModel('catalog/product');
while (!feof($file_handle)) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
$product = $catalog->loadByAttribute('sku', $allSku);
try {
$product->delete();
echo "Product with ID: " . $product->getId() . " Deleted Successfully". PHP_EOL;
} catch (Exception $e) {
echo "Product with ID: " . $product->getId() . "cannot be deleted" . PHP_EOL;
}
}
echo "Finish Delete";
ไม่มีรหัสวิธี
ในส่วนผู้ดูแลระบบด้านล่างManage Products
จะพบกริดกับผลิตภัณฑ์ทั้งหมดของคุณ SKU
มีคอลัมน์ที่เรียกว่าเป็น ที่นี่คุณสามารถกรองผลิตภัณฑ์ตามมูลค่า
จากนั้นเมื่อคุณกรองตาม SKU คุณสามารถใช้ช่องทำเครื่องหมายทางด้านซ้ายมือเพื่อเลือกรายการทั้งหมดที่คุณต้องการลบ
แจ้งให้ทราบselect all
ว่าจะเลือกรายการทั้งหมดในตารางที่สมบูรณ์และselect visible
จะเลือกเฉพาะรายการในหน้าปัจจุบันของตาราง
เมื่อคุณเลือกรายการที่คุณต้องการคุณสามารถใช้ปุ่มการกระทำที่ด้านขวาบนของตารางและเลือกตัวเลือกการลบ
นี่จะเป็นการเตือนให้คุณแน่ใจว่าคุณต้องการลบรายการเหล่านี้ หลังจากเลือกใช่ในป๊อปอัปนี้แล้วมันจะทำการลบรายการของคุณต่อไป ขึ้นอยู่กับการตั้งค่าดัชนีของคุณคุณอาจต้องเรียกใช้ดัชนีอีกครั้งหลังจากกระบวนการนี้
Kevin S คุณสามารถลบผลิตภัณฑ์ด้วยไฟล์ csv เพียงทำตามขั้นตอนเป็นคลื่น
ขั้นตอนที่ 1 :
สร้างไฟล์ csv และวาง skus ที่คุณต้องการลบออกจากระบบ ตั้งชื่อไฟล์เป็นskus.csv
ขั้นตอนที่ 2 :
สร้างและแทนที่ไฟล์ php ในไดเรกทอรีรากของคุณ จากนั้นผ่านรหัสต่อไปนี้
require_once '../app/Mage.php';
Mage :: app("default") -> setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$skuAll =array();
$file_handle = fopen("skus.csv", "r");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
}
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter(
'sku', array('in' => $allSku)
)
->load();
if(is_array($products))
{
foreach ($products as $key => $pId)
{
try
{
$product = Mage::getModel('catalog/product')->load($pId)->delete();
echo "successfully deleted product with ID: ". $pId ."<br />";
}
catch (Exception $e)
{
echo "Could not delete product with ID: ". $pId ."<br />";
}
}
}
หมายเหตุ: ฉันแนะนำให้คุณก่อนเรียกใช้รหัสนี้คุณต้องได้รับการสำรองข้อมูล ฉันหวังว่ามันจะช่วยให้คุณ
เพราะตารางรายการ
คือกุญแจต่างประเทศของ catalog_product_entity
ดังนั้นเมื่อลบเรกคอร์ดใน catalog_product_entity เรคคอร์ดของตารางด้านบนจะถูกลบด้วย
รหัส (ใช้คำตอบของ Marius) ลบผลิตภัณฑ์ทั้งหมดที่มี entity_id <= 18069:
$adapter = $setup->getConnection("catalog_write");
$where = array(
'entity_id <= ?' => '18069'
);
$tableCatalogProduct = Mage::getModel("catalog/product")->getResource()->getEntityTable();
$adapter->delete($tableCatalogProduct, $where);
$tableRating = Mage::getModel("rating/rating")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);
$tableRating = Mage::getModel("review/review")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);