Introduccion

Con el tiempo, una tienda PrestaShop puede acumular registros duplicados por errores de importación, fallos en módulos, migraciones mal hechas o integraciones de terceros. Estos duplicados pueden generar problemas como productos repetidos, categorías replicadas, combinaciones inconsistentes y errores en pedidos.

En este artículo aprenderás cómo detectar y eliminar registros duplicados en PrestaShop directamente desde la base de datos, usando consultas MySQL específicas y seguras para cada tipo de entidad.

  1. ¿Por qué aparecen registros duplicados en PrestaShop?

Causa

Ejemplo

🧾 Importaciones CSV repetidas

Productos importados varias veces por error

🔁 Migraciones incompletas

Combinaciones duplicadas sin asignación correcta

🔌 Módulos de terceros defectuosos

Creación de direcciones duplicadas

👥 Registro de clientes sin validación

Cuentas similares con mismo email

Identificar estas situaciones a tiempo ayuda a mantener integridad en el catálogo y evitar errores funcionales.

  1. Identificar duplicados en productos

Puedes detectar productos con la misma referencia:

SELECT reference, COUNT(*) c
FROM ps_product
WHERE reference IS NOT NULL AND reference != ''
GROUP BY reference
HAVING c > 1;
Para eliminar uno de los duplicados:
DELETE FROM ps_product
WHERE id_product IN (
  SELECT id_product FROM (
    SELECT id_product
    FROM ps_product
    WHERE reference = 'DUPLICADA-123'
    ORDER BY id_product DESC
    LIMIT 1 OFFSET 1
  ) AS sub
);

  1. Detección y limpieza de combinaciones repetidas

En ps_product_attribute puede haber combinaciones duplicadas:

SELECT id_product, GROUP_CONCAT(id_product_attribute) AS attrs, COUNT(*) c
FROM ps_product_attribute
GROUP BY id_product, id_product_attribute
HAVING c > 1;

Para eliminarlas:

DELETE pa FROM ps_product_attribute pa
JOIN (
  SELECT MIN(id_product_attribute) keep_id, id_product
  FROM ps_product_attribute
  GROUP BY id_product, id_product_attribute
) to_keep
ON pa.id_product = to_keep.id_product
AND pa.id_product_attribute != to_keep.keep_id;
  1. Categorías duplicadas: cómo gestionarlas

Verifica si hay categorías con el mismo nombre y nivel:

SELECT name, COUNT(*)
FROM ps_category_lang
GROUP BY name
HAVING COUNT(*) > 1;

Valida el id_category asociado y elimina los registros innecesarios o reasigna productos con:

UPDATE ps_category_product
SET id_category = NUEVA_ID
WHERE id_category = ID_DOBLE;

Y luego:

DELETE FROM ps_category WHERE id_category = ID_DOBLE;
  1. Comprobación en clientes o direcciones repetidas

Clientes con mismo email:

SELECT email, COUNT(*)
FROM ps_customer
GROUP BY email
HAVING COUNT(*) > 1;

Direcciones con misma info:

SELECT id_customer, alias, COUNT(*)
FROM ps_address
GROUP BY id_customer, alias
HAVING COUNT(*) > 1;
  1. Cómo eliminar duplicados de forma segura
  1. 🔒 Haz una copia de seguridad de la base de datos
  2. Ejecuta primero consultas SELECT para confirmar duplicados
  3. Usa subconsultas o LIMIT para evitar eliminar todo
  4. Actualiza referencias relacionadas si haces un DELETE

Ejemplo de flujo seguro:

— Verificamos duplicados

SELECT reference FROM ps_product GROUP BY reference HAVING COUNT(*) > 1;

— Elegimos qué ID conservar y borramos el resto

DELETE FROM ps_product WHERE id_product = ID_A_ELIMINAR;
  1. Automatización y validaciones

Puedes crear scripts que ejecuten validaciones semanales:

$result = Db::getInstance()->executeS('SELECT email, COUNT(*) c FROM ps_customer GROUP BY email HAVING c > 1');
foreach ($result as $r) {
  echo 'Duplicado: '.$r['email']."\n";
}

O integrarlo en tu dashboard personalizado con alarmas de duplicados.

  1. Comparativa: SQL manual vs módulos de limpieza

Método

Ventajas

Desventajas

SQL manual

Gratuito, control completo, auditable

Requiere conocimiento técnico

Módulos del Marketplace

Fácil uso, interfaz amigable

Coste y menos flexibilidad

Validación por PHP

Integrable con paneles propios

Desarrollo personalizado necesario

Conclusión

Detectar y eliminar duplicados en PrestaShop es una tarea crítica para mantener la salud del catálogo, integridad de pedidos y rendimiento general. Aunque existen módulos para ello, usar SQL directamente te da un control más preciso, especialmente si entiendes la estructura interna del sistema.

Hazlo con precaución, revisa siempre con SELECT antes de eliminar y documenta las operaciones si trabajas en equipo o para clientes.

Ir al contenido