2012-01-17 16 views
16

Hay muchas publicaciones relacionadas con este tema en Magento. La mayoría de ellos funcionan, pero el problema con Categorías que no restablecen sus valores a CERO después de ejecutar los códigos de eliminación/instrucciones de SQL aún persiste y no se ha abordado hasta ahora.Eliminando TODOS los productos en Magento

¿Alguien aquí tiene el código o procedimiento correcto para eliminar correctamente todos los productos del inventario y hacer que el listado de Categoría también se restablezca a cero después de ejecutarlo?

Gracias de antemano.

+0

¿Te refieres a los números de identificación? tendrías que restablecer las claves primarias auto_increment de las tablas. –

+0

No. Me refiero al recuento de los productos en cada categoría. –

Respuesta

4

Independientemente del método utilizado para eliminar los productos, la reconstrucción del índice "Productos de categoría" debe corregir los recuentos. Vaya a Sistema> Gestión de índices. Marque la casilla junto a "Productos de la categoría", cambie la acción (arriba a la derecha) a "Reindexar" y haga clic en enviar.

+0

Cambié de opinión. Para el beneficio de aquellos que están teniendo un problema similar, elijo esta como la respuesta más adecuada. –

3

Para eliminar productos, simplemente puede usar el servidor:
Catálogo> Administrar productos> Seleccione todos los checboxes y elija Acción = Eliminar y pulse enviar.
Esto puede funcionar muy bien para algunos miles de productos.

+4

Gracias. ¿Cómo funciona esto para los productos 400,000 ++? –

+0

Bueno para tantos productos, será realmente lento y habrá problemas de tiempo de espera de memoria/servidor. – MagePsycho

5

Para eliminar todos los productos que puede utilizar esta consulta:

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

Saludos :)

+0

Esta consulta no funciona debido a un problema de integridad de datos. Me muestra el error '# 1701 - No se puede truncar una tabla a la que se hace referencia en una restricción de clave externa (' dbname' .catalog_product_bundle_option_value', CONSTRAINT 'FK_MKM_CAT_PRD_BNDL_OPT_VAL_OPT_ID_MKM_CAT_PRD_BNDL_OPT_OPT_ID' FOREIGN KEY (' option_id') REFERENCIAS 'dbname''catalog_produ)'. Alguna idea para resolverlo? – Abaij

+2

agregue 'SET FOREIGN_KEY_CHECKS = 0;' en la parte superior del código anterior y agregue 'SET FOREIGN_KEY_CHECKS = 1;' en la parte inferior del código. – Zaheerabbas

+0

Eliminar comprobaciones de la integridad de datos, cruce los dedos y espero que no se produzcan daños en los datos = 'SET FOREIGN_KEY_CHECKS = 0;' –

51

Eliminación de todos los productos de Magento se puede lograr fácilmente, basta con ejecutar:

DELETE FROM `catalog_product_entity` 

Debido las restricciones de clave externa configuradas en la base de datos de Magento, todas las otras tablas que tienen información del producto en ellas se limpian muy bien. Por supuesto, tomará un tiempo eliminar muchos productos, pero al menos se limpia muy bien.

Si la consulta no se puede ejecutar por falta de tiempo máximo de ejecución, siempre se puede ejecutar algo como:

DELETE FROM `catalog_product_entity` LIMIT 10000 

Actualización: esta lógica también se acostumbra en el núcleo de Magento, por lo que es seguro de usar! https://github.com/OpenMage/magento-mirror/blob/magento-1.8/app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php#L462

+0

esto funcionó muy bien, gracias – UltimateBrent

+0

esto no elimina las categorías – Nicola

+4

De hecho, no lo hace está destinado a eliminar todos los productos. –

12

En una sola secuencia de comandos:

<?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(); 
    } 
} 

hizo por más de 1400 productos, funcionaba bien. Tienes que hacer una reindexación después de eso.

Cuidado con la secuencia de comandos se borrar TODOS sus productos

+0

+1 para usar las secuencias de comandos de Magento, que deberían preservar la integridad de los datos en lugar de atacar la base de datos, encontrar que las cosas no funcionan y desactivar las comprobaciones de integridad para descubrir más tarde que las cosas realmente no funcionan. –

+0

problemas de integridad en productos de mayo –

+0

Para un número mayor de productos (~ 100000) la secuencia de comandos se puede mejorar agregando: 'ini_set (" memory_limit "," 2024M "); ini_set ("max_execution_time", "86400"); 'y' Mage :: log ('para eliminar:'. $ Product-> getId()); 'para obtener algunos comentarios. Y podría ser sensato iniciarlo en una pantalla. – paderEpiktet

2
Mage::getModel('catalog/product')->getCollection()->delete(); 
0

Trabajó como un encanto ...

phpmyadmin - SWL seleccione DATABSE (Magento) en la parte superior y luego pegar el siguiente:

DELETE FROM `catalog_product_entity` 
-4
SELECT * FROM `mage_catalog_product_entity` 

le da la lista de productos que actualmente están activos.

+1

No, no es así. "Activo" podría implicar cualquier cosa. Lo que recuperarías aquí es una lista de todos tus productos. Sin embargo, esto no tiene relevancia en absoluto a la pregunta. –

1

Probado en 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; 
+2

Nunca utilice consultas que establezcan las comprobaciones de clave externa a 0. Las consultas se ejecutan más rápido, pero corre el riesgo de dañar la base de datos. –

+0

No se puede truncar con FK activado, porque imho mysql elimina la tabla y crea una nueva. –

0

La solución más limpia en mi opinión es la siguiente:

  • Ir a System -> Index Management y establecer todos los índices de "Actualización manual" modo de índice
  • Ir a Catalog -> Manage Products, seleccione todos los productos y utilizar la Delete acción para eliminar todos los productos.

Esto no es tan rápido como suprimiendo manualmente los productos de la base de datos pero es probablemente la forma más adecuada más rápida para eliminar todos los productos en los que usted no tiene que preocuparse de entradas de la base huérfanos o conflictos de clave externa.

Cuestiones relacionadas