Consulta SQL para extraer productos activos sin y con combinaciones en PrestaShop

Consulta SQL para extraer productos activos sin y con combinaciones en PrestaShop

Cuando trabajamos con una tienda online desarrollada con PrestaShop a veces puede interesarnos descargar el catálogo de productos a un archivo tipo CSV, ya sea para poder revisarlos si tener que estar online o porque queremos importarlo en otro sitio. Por defecto se nos permite desde el mismo apartado de productos exportarlos. Sin embargo el resultado es un resumen pormenorizado que no incluye cada combinación de producto por separado sino que trata todo el stock como si fuera uno solo. Si la tienda en cuestión trabaja principalmente con combinaciones esto es especialmente poco útil.

No obstante, parece que los desarrolladores son conscientes de esta limitación y por eso PrestaShop cuenta con una consola para ejecutar directamente consultas SQL a la base de datos de la tienda. Esta función nos limita a consultas para extraer datos, por lo que no podremos subir nuevos o hacer modificaciones, pero nos permite extraer información mucho más detallada que después podremos exportar a un archivo CSV o SQL

Vamos a ver cómo hacer una consulta SQL para poder exportar todos los productos activos tengan combinaciones o no. En este caso los campos que sacaremos serán el id, nombre, precio, peso, cantidad y categorías. A todos ellos les daremos un alias para la cabecera de cada columna y filtraremos por el idioma principal y que el producto esté activo, como indicaba antes.

SELECT
p.id_product AS ID,
pl.name AS Nombre,
p.price AS Precio,
pa.price AS Precio_combinacion,
GROUP_CONCAT(DISTINCT(pal.name) SEPARATOR ", ") AS Combinaciones,
p.weight AS Peso,
pq.quantity AS Cantidad,
GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") AS Categorias
FROM ps_product p
LEFT JOIN ps_product_attribute pa ON (p.id_product = pa.id_product)
LEFT JOIN ps_stock_available pq ON (p.id_product = pq.id_product AND pa.id_product_attribute = pq.id_product_attribute)
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_product_attribute_combination pac ON (pa.id_product_attribute = pac.id_product_attribute)
LEFT JOIN ps_attribute_lang pal ON (pac.id_attribute = pal.id_attribute)
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product)
LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category)
WHERE pl.id_lang = 1
AND p.active = 1
AND cl.id_lang = 1
GROUP BY p.id_product, pac.id_product_attribute
ORDER BY p.id_product

Toda esta consulta es personalizable, solo tienes que conocer un poco de SQL y los nombres de las tablas para poder realizar cambios a criterio. Recuerda que el prefijo de las tablas de tu base de datos puede cambiar, así que en ese caso debes sustituir ps_ por el que corresponda.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *