SQL legacy para auditar combinaciones y stock en PrestaShop
Consulta de diagnóstico sobre product_attribute, combinaciones de atributos y stock_available, recuperada de mantenimiento real de PrestaShop 1.6 y 1.7.
- Revisado
- Compatibilidad
- PrestaShop 1.6.x–1.7.x; verificar esquema y multitienda
- Lectura
- 2 min
- Autor
- Gabriel — infinit8
Cuando el back office mostraba una referencia o cantidad inesperada, una consulta de solo lectura permitía comparar la combinación con su fila de stock. Este mapa sigue siendo valioso para investigar tiendas antiguas, siempre que se adapte al esquema y contexto multitienda exactos.
Qué relaciona cada tabla
product_attribute: combinación concreta, referencia y otros datos propios.product_attribute_combination: relación entre la combinación y sus valores de atributo.attribute_lang: nombre traducido del valor.stock_available: cantidad por producto, combinación y contexto de tienda o grupo.
Consulta de diagnóstico
El prefijo se muestra como ps_ por legibilidad; una instalación real puede usar otro. Añade el idioma y la tienda de forma explícita para no duplicar filas.
SELECT
pa.id_product,
pa.id_product_attribute,
pa.reference,
al.name AS attribute_value,
sa.quantity,
sa.id_shop,
sa.id_shop_group
FROM ps_product_attribute AS pa
INNER JOIN ps_product_attribute_combination AS pac
ON pac.id_product_attribute = pa.id_product_attribute
INNER JOIN ps_attribute_lang AS al
ON al.id_attribute = pac.id_attribute
LEFT JOIN ps_stock_available AS sa
ON sa.id_product = pa.id_product
AND sa.id_product_attribute = pa.id_product_attribute
WHERE pa.id_product = :product_id
AND al.id_lang = :language_id
ORDER BY pa.id_product_attribute, al.name;
Ejecuta primero SELECT en una copia o con un usuario de solo lectura. No conviertas esta consulta en UPDATE: PrestaShop mantiene reglas de stock y multitienda que una escritura directa puede saltarse.
Cómo leer resultados extraños
Varias filas por combinación pueden ser correctas si existen varios atributos. Duplicados inesperados suelen indicar que falta restringir idioma, tienda o grupo. Una fila con id_product_attribute = 0 representa el stock del producto sin combinación.
Por qué separar diagnóstico de escritura
Las notas antiguas incluían actualizaciones directas de cantidad. Se conservan como evidencia de trabajo, pero no se publican como receta: para modificar stock conviene usar la capa de PrestaShop o su API y validar el resultado en el contexto multitienda.
Preguntas frecuentes
¿Por qué no aparece una combinación?
Comprueba que existe en product_attribute y que su id enlaza con stock_available. Después revisa las restricciones de tienda, grupo e idioma.
¿Puedo asumir que el prefijo es ps_?
No. Es el valor predeterminado, pero cada instalación puede tener uno diferente.
Referencias y revisión
Contenido contrastado con documentación oficial. Comprueba siempre el comportamiento en un entorno de pruebas antes de desplegar cambios.