Magentoにはこの問題に関する投稿がたくさんあります。それらのほとんどは機能しますが、削除コード/ SQLステートメントの実行後にカテゴリーが値をゼロにリセットしないという問題は依然として解決されず、今まで対処されていません。
ここの誰かがすべての製品を在庫から適切に削除するための正しいコードまたは手順を持っていますか、それを実行した後にカテゴリリストもゼロにリセットしましたか?
前もって感謝します。
商品の削除に使用された方法に関係なく、「Category Products」インデックスを再構築するとカウントが修正されます。 [システム]> [インデックス管理]に移動します。 「Category Products」の横にあるチェックボックスをオンにし、アクション(右上)を「Reindex」に変更して、[送信]をクリックします。
Magentoからすべての製品を削除するには、次のコマンドを実行するだけで簡単に実行できます。
DELETE FROM `catalog_product_entity`
Magentoのデータベースで設定された外部キー制約のため、製品情報が含まれる他のすべてのテーブルは適切にクリーンアップされます。もちろん、多くの製品を削除するには時間がかかりますが、少なくともきれいにクリーンアップされます。
最大実行時間のためにクエリを実行できない場合は、常に次のようなものを実行できます。
DELETE FROM `catalog_product_entity` LIMIT 10000
更新:このロジックはMagentoのコアでも使用されるため、安全に使用できます! https://github.com/OpenMage/magento-mirror/blob/magento-1.8/app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php#L462
スタンドアロンスクリプトで:
<?php
require 'app/Mage.php';
Mage::app('admin')->setUseSessionInUrl(false);
$products = Mage::getModel('catalog/product')->getCollection();
foreach ($products as $product) {
try {
$product->delete();
} catch(Exception $e) {
echo "Product #".$product->getId()." could not be remvoved: ".$e->getMessage();
}
}
1400以上の製品で問題なく動作しましたか。その後、インデックスの再作成を行う必要があります。
上記のスクリプトがすべて削除あなたの製品になることに注意してください
すべての製品を削除するには、次のクエリを使用できます。
TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_entity`;
TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;
INSERT INTO `catalog_product_link_type`(`link_type_id`,`code`) VALUES (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
INSERT INTO `catalog_product_link_attribute`(`product_link_attribute_id`,`link_type_id`,`product_link_attribute_code`,`data_type`) VALUES (1,2,'qty','decimal'),(2,1,'position','int'),(3,4,'position','int'),(4,5,'position','int'),(6,1,'qty','decimal'),(7,3,'position','int'),(8,3,'qty','decimal');
INSERT INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default');
よろしく:)
商品を削除するには、バックエンドを使用するだけです:
カタログ>製品の管理>すべてのチェックボックスを選択し、アクション=削除を選択して送信を押します。
これは、数千の製品に非常に適している場合があります。
魅力のように働いた...
PHP phpmyadmin-上部にあるデータベース(magento)SWLを選択し、次のものを貼り付けます。
DELETE FROM `catalog_product_entity`
Mage::getModel('catalog/product')->getCollection()->delete();
Magento 1.7.0.2でテスト済み
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_flat_1`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_relation`;
TRUNCATE TABLE `catalog_category_product_index`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;
TRUNCATE TABLE `cataloginventory_stock_status_idx`;
TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `core_url_rewrite`;
INSERT INTO `catalog_product_link_type`(`link_type_id`,`code`) VALUES (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
INSERT INTO `catalog_product_link_attribute`(`product_link_attribute_id`,`link_type_id`,`product_link_attribute_code`,`data_type`) VALUES (1,2,'qty','decimal'),(2,1,'position','int'),(3,4,'position','int'),(4,5,'position','int'),(6,1,'qty','decimal'),(7,3,'position','int'),(8,3,'qty','decimal');
INSERT INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default');
TRUNCATE TABLE `catalog_product_entity`;
SET FOREIGN_KEY_CHECKS = 1;
私の意見で最もクリーンな解決策はこれです:
System -> Index Management
に移動し、すべてのインデックスを「手動更新」インデックスモードに設定しますCatalog -> Manage Products
に移動し、すべての製品を選択し、Delete
アクションを使用してすべての製品を削除します。これはデータベースから手動で製品を削除するほど速くはありませんが、孤立したデータベースエントリや外部キーの競合を心配する必要がないすべての製品を削除するためのおそらく最も速い適切な方法です。