Índice
Introducción
Precaución: Realiza una copia de seguridad
Accediendo a phpMyAdmin
1. Accede a tu panel de control del hosting
2. Selecciona tu base de datos
Identificar y Eliminar Duplicados por Nombre
Paso 1: Identificar productos duplicados por nombre
Paso 2: Eliminar duplicados manteniendo uno
Identificar y Eliminar Duplicados por SKU
Paso 1: Identificar duplicados por SKU
Introduccion
Magento 2 es una de las plataformas de comercio electrónico más robustas, utilizada por grandes y medianas empresas para gestionar sus tiendas online. Sin embargo, como en cualquier plataforma, pueden surgir problemas con productos duplicados que afectan la eficiencia operativa, la experiencia del cliente y la integridad de los datos. Esta guía explica cómo identificar y eliminar productos duplicados en Magento 2 utilizando MySQL y phpMyAdmin.
Nota: Las imágenes aquí mostradas hacen referencia a una DB de WordPress
Precaución: Realiza una copia de seguridad
Antes de realizar cualquier cambio en la base de datos, asegúrate de crear una copia de seguridad completa. Esto es crucial para evitar pérdidas de datos en caso de errores. Puedes usar herramientas como el backup nativo de Magento 2 o las opciones de tu hosting.
Accediendo a phpMyAdmin
- Accede a phpMyAdmin desde el panel de control de tu hosting (cPanel, Plesk u otro).
- Selecciona tu base de datos: En el panel izquierdo, elige la base de datos correspondiente a tu instalación de Magento.
- Abre el editor SQL: Haz clic en la pestaña SQL para escribir y ejecutar las consultas.
Exportar backup:
Recuerda que picando en el nombre de la base de datos de la columna izquierda verás las tablas en la ventana central, pica arriba en exportar. Así te descargas una imagen de esa base de datos a tu equipo.
Estructura de la base de datos en Magento 2
En Magento 2, los datos de los productos están distribuidos en varias tablas debido a su arquitectura EAV (Entidad-Attributo-Valor). Las tablas principales relacionadas con los productos son:
- catalog_product_entity: Contiene la información básica de los productos (ID, SKU, tipo de producto, etc.).
- catalog_product_entity_varchar: Almacena valores de atributos de texto, como nombres y descripciones.
- catalog_product_entity_decimal: Contiene valores numéricos como precios.
- catalog_product_entity_int: Almacena valores enteros, como estados o configuraciones.
- cataloginventory_stock_item: Gestiona los niveles de inventario.
Identificar y Eliminar Duplicados por Nombre
Paso 1: Identificar productos duplicados por nombre
Usa esta consulta SQL para encontrar nombres de productos duplicados:
SELECT ev.value AS product_name, COUNT(*) AS count FROM catalog_product_entity_varchar ev JOIN eav_attribute ea ON ev.attribute_id = ea.attribute_id WHERE ea.attribute_code = 'name' GROUP BY ev.value HAVING count > 1;
Solo para Woocommerce o PrestaShop
En la imagen de arriba se resalta el prefijo de la tabla. Tienes que poner el título de la tuya. Cuando empieces a escribir te saldrá un globo con las tablas de tu base de datos y ahí la podrás seleccionar.
Cerciora que no se mezcle con el script que te añado.
Explicación de la consulta:
- catalog_product_entity_varchar: Contiene los valores de texto de los atributos.
- eav_attribute: Relaciona los atributos con su código (en este caso, name).
- GROUP BY ev.value: Agrupa los productos por nombre.
- HAVING count > 1: Filtra solo los nombres duplicados.
Paso 2: Eliminar duplicados manteniendo uno
Usa esta consulta para eliminar productos duplicados por nombre, manteniendo el producto con el ID más bajo:
DELETE cpe, cpev, cps FROM catalog_product_entity cpe LEFT JOIN catalog_product_entity_varchar cpev ON cpe.entity_id = cpev.entity_id LEFT JOIN cataloginventory_stock_item cps ON cpe.entity_id = cps.product_id WHERE cpe.entity_id > ( SELECT MIN(cpe2.entity_id) FROM catalog_product_entity cpe2 JOIN catalog_product_entity_varchar cpev2 ON cpe2.entity_id = cpev2.entity_id WHERE cpev.value = cpev2.value );
Explicación de la consulta:
- Elimina registros de:
- catalog_product_entity: Información básica del producto.
- catalog_product_entity_varchar: Nombres y atributos relacionados.
- cataloginventory_stock_item: Inventario.
- WHERE cpe.entity_id > (…): Mantiene el producto con el entity_id más bajo como el original.
Identificar y Eliminar Duplicados por Referencia (SKU)
Los SKUs son identificadores únicos por definición, pero errores en la importación de datos o configuraciones erróneas pueden causar duplicados. Usa esta consulta para identificarlos:
SELECT sku, COUNT(*) AS count FROM catalog_product_entity GROUP BY sku HAVING count > 1;
Explicación de la consulta:
- catalog_product_entity: Contiene los SKUs de los productos.
- GROUP BY sku: Agrupa los productos por SKU.
- HAVING count > 1: Filtra solo los SKUs duplicados.
Paso 2: Eliminar duplicados manteniendo uno
Para eliminar duplicados basándote en el SKU, ejecuta esta consulta:
DELETE cpe, cps FROM catalog_product_entity cpe LEFT JOIN cataloginventory_stock_item cps ON cpe.entity_id = cps.product_id WHERE cpe.entity_id > ( SELECT MIN(cpe2.entity_id) FROM catalog_product_entity cpe2 WHERE cpe.sku = cpe2.sku );
Explicación de la consulta:
- Similar a la consulta anterior, pero se enfoca en los SKUs duplicados.
- WHERE cpe.sku = cpe2.sku: Filtra productos con el mismo SKU.
Limpiar Datos Huérfanos
Después de eliminar duplicados, es posible que queden registros huérfanos en las tablas relacionadas. Usa esta consulta para limpiarlos:
DELETE FROM catalog_product_entity_varchar WHERE entity_id NOT IN (SELECT entity_id FROM catalog_product_entity);
Explicación:
- DELETE FROM catalog_product_entity_varchar: Elimina datos huérfanos en la tabla de atributos de texto.
- NOT IN: Asegura que solo se eliminen registros que no tienen un producto asociado.
Verificar los Resultados
- Ejecuta nuevamente las consultas de identificación para confirmar que no hay duplicados.
- Comprueba en el panel de administración de Magento 2 que los productos se visualizan correctamente.
- Realiza pruebas en el frontend para asegurarte de que todo funciona como se espera.
Conclusión
Esta guía proporciona un enfoque claro y seguro para identificar y eliminar productos duplicados en Magento 2. Al limpiar la base de datos, mejorarás el rendimiento de tu tienda, optimizarás la experiencia del cliente y facilitarás la gestión del inventario.
Si tienes dudas o necesitas personalizar estas consultas para tu estructura específica, no dudes en pedir ayuda. ¡Mantén tu tienda Magento 2 eficiente y profesional!