Introduccion

En tiendas PrestaShop con catálogos grandes, reorganizar la asignación de productos a categorías puede ser una necesidad habitual: cambios de temporada, migraciones, actualizaciones de estructura o simplemente mejoras SEO. Hacerlo manualmente desde el back-office puede ser inviable cuando hablamos de cientos o miles de productos.

Este artículo explora cómo realizar esa tarea de forma masiva y controlada directamente desde MySQL, con ejemplos prácticos, validaciones y automatizaciones.

  1. Estructura de asignación producto-categoría en PrestaShop

PrestaShop utiliza una tabla específica para relacionar productos con categorías:

Tabla

Descripción

ps_category_product

Relación entre productos y sus categorías

Cada fila indica que un producto pertenece a una categoría concreta.

Campos clave:

  • id_category
  • id_product
  • position

Además, en ps_product hay un campo:

  • id_category_default → la categoría por defecto del producto (la que se usa en URLs)
  1. Consultar asignaciones actuales

Productos de una categoría concreta

SELECT p.id_product, p.reference, cp.id_category
FROM ps_product p
JOIN ps_category_product cp ON p.id_product = cp.id_product
WHERE cp.id_category = 5;

Categorías asignadas a un producto

SELECT id_category FROM ps_category_product WHERE id_product = 101;
  1. Eliminar asignaciones existentes

Eliminar todas las categorías de un producto

DELETE FROM ps_category_product WHERE id_product = 101;

Eliminar productos de una categoría concreta

DELETE FROM ps_category_product WHERE id_category = 5;

Precaución: No eliminar sin respaldo previo si tienes categorías compartidas entre productos.

  1. Asignar productos a una nueva categoría masivamente

Asignar productos por ID a una categoría

INSERT INTO ps_category_product (id_category, id_product, position)
SELECT 10, id_product, 0 FROM ps_product WHERE id_product BETWEEN 200 AND 250;

Esto asigna 51 productos a la categoría 10.

Asignar productos por proveedor

INSERT INTO ps_category_product (id_category, id_product, position)
SELECT 8, p.id_product, 0
FROM ps_product p
JOIN ps_product_supplier s ON p.id_product = s.id_product
WHERE s.id_supplier = 2;
  1. Cambiar la categoría por defecto del producto
UPDATE ps_product
SET id_category_default = 10
WHERE id_product BETWEEN 200 AND 250;

Es recomendable que esta categoría también esté en ps_category_product.

  1. Validar asignaciones tras la modificación

Verificar productos en nueva categoría

SELECT id_product FROM ps_category_product WHERE id_category = 10;

Verificar si coinciden con la categoría por defecto

SELECT id_product, id_category_default
FROM ps_product
WHERE id_category_default = 10;
  1. Comparativa de métodos

Método

Ventajas

Inconvenientes

SQL directo

Rápido, flexible, masivo

Riesgo si se ejecuta sin validaciones

Back-office

Seguro, validado

Muy lento en grandes catálogos

Módulo externo

Interfaz amigable

Dependencia externa, posible coste

  1. Automatización con script PHP

<?php

require(dirname(__FILE__).’/config/config.inc.php’);

require(dirname(__FILE__).’/init.php’);

 $sql = ‘INSERT INTO ps_category_product (id_category, id_product, position)

        SELECT 15, id_product, 0 FROM ps_product WHERE id_supplier = 2′;

Db::getInstance()->execute($sql);

 $sql2 = ‘UPDATE ps_product SET id_category_default = 15 WHERE id_supplier = 2’;

Db::getInstance()->execute($sql2);

 echo «Asignación de productos a categoría completada.»;

?>

Apéndice de consultas clave

  • Eliminar categorías de un producto:
DELETE FROM ps_category_product WHERE id_product = 101;
  • Asignar productos por rango de IDs:
INSERT INTO ps_category_product (id_category, id_product, position)
SELECT 10, id_product, 0 FROM ps_product WHERE id_product BETWEEN 200 AND 250;
  • Cambiar categoría por defecto:
UPDATE ps_product SET id_category_default = 10 WHERE id_product = 101;

Conclusión

Modificar la asignación de productos a categorías desde MySQL es una acción potente que permite reorganizar el catálogo de forma escalable. Bien aplicado, este enfoque agiliza tareas de limpieza, estacionalidad o migración, sin depender de procesos manuales o interfaces lentas.

Al combinarlo con validaciones, automatización PHP y buenas prácticas, se convierte en una herramienta fundamental para desarrolladores y técnicos que gestionan tiendas PrestaShop de alto tráfico o gran volumen.

Ir al contenido