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.

diagnostico-combinaciones.sql
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;
Importante

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.