Câu trả lời:
Cách nhanh nhất để làm điều đó là chạy truy vấn này trực tiếp.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Mọi thứ nên xếp tầng độc đáo. giá trị thuộc tính sẽ bị xóa, quan hệ thể loại sẽ bị xóa, upells, crosssells và liên quan và như vậy.
[EDIT]
Có một nhược điểm này. Cảm ơn STW đã phát hiện ra điều này. Các đánh giá và xếp hạng sẽ vẫn là trẻ mồ côi vì không có khóa ngoại đối với bảng sản phẩm dành cho chúng.
->delete()
nhưng sẽ né bất kỳ mã nào nghe các sự kiện. Trong kho Magento, có vẻ như các đánh giá và xếp hạng sẽ bị mồ côi (chúng sẽ không bị xóa khi sản phẩm được liên kết của chúng).
catalog_product_entity_*
bảng có FK trên entity_id
trường đến catalog_product_entity.entity_id
trường. Họ nên xếp tầng độc đáo.
Tất cả đều tôn trọng Marius, nhưng vui lòng không tương tác trực tiếp với cơ sở dữ liệu nếu điều đó hoàn toàn có thể tránh được. Có thể các bảng liên quan sẽ được cập nhật tự động, nếu bản phát hành Magento của bạn và tất cả các tiện ích mở rộng của bạn không có lỗi ở tất cả các vị trí thích hợp. Nhưng nếu họ không, loại điều đó có thể phá hủy trang web của bạn.
Thay vào đó, bạn có thể sử dụng tính năng nhập CSV của riêng Magento.
Chỉ cần liệt kê SKU của bạn trong một tệp, đơn giản như:
sku
ABC1
ABC2
ABC3
...Vân vân. Sau đó lưu dưới dạng tệp CSV.
Sau đó, trong Hệ thống> Nhập / Xuất> Nhập, chọn Loại thực thể: Sản phẩm và Hành vi nhập: Xóa Thực thể và nhập tệp này. Và đó là nó!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Bạn có thể làm điều đó theo chương trình. Tạo một skustodelete.csv liệt kê tất cả các skus sẽ bị xóa và sau đó đây là mã để tiếp tục
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";
Cách không có mã
Trong phần quản trị dưới đây Manage Products
sẽ tìm thấy một lưới với tất cả các sản phẩm của bạn. Có một cột gọi là SKU
. Tại đây bạn có thể lọc các sản phẩm của mình dựa trên giá trị.
Sau đó, khi bạn đã lọc bởi SKU, bạn có thể sử dụng các hộp kiểm ở phía bên trái để chọn tất cả các mục bạn muốn xóa.
Lưu ý cái select all
nào sẽ chọn tất cả các mục trong lưới hoàn chỉnh và select visible
sẽ chỉ chọn các mục trên trang hiện tại của lưới.
Khi bạn đã chọn các mục bạn muốn, bạn có thể sử dụng nút hành động hàng loạt ở phía trên bên phải của lưới và chọn tùy chọn xóa.
Điều này sẽ nhắc bạn đảm bảo rằng bạn chắc chắn muốn xóa các mục này. Sau khi chọn có cho cửa sổ bật lên này, nó sẽ tiến hành xóa các mục của bạn. Tùy thuộc vào cài đặt chỉ mục của bạn, bạn có thể phải chạy lại chỉ mục sau quá trình này.
Kevin S, bạn có thể xóa sản phẩm bằng tệp csv. Chỉ cần làm theo bước cuồn cuộn
Bước 1 :
Tạo một tệp csv và qua skus mà bạn muốn xóa khỏi hệ thống. Đặt tên tệp là skus.csv
Bước 2 :
Tạo và thay thế một tập tin php trong thư mục gốc của bạn. Sau đó qua đoạn mã sau
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 />";
}
}
}
Lưu ý: Tôi đã khuyến nghị bạn trước khi chạy mã này, bạn phải có bản sao lưu. Tôi hy vọng nó sẽ giúp bạn.
Vì bảng danh sách
là các khóa ngoại của catalog_product_entity.
Vì vậy, khi xóa một bản ghi trong catalog_product_entity, một số bản ghi của các bảng trên cũng sẽ bị xóa.
Mã (thực hiện câu trả lời của Marius) xóa tất cả sản phẩm có 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);