Jump to content

Consulta SQL para exportar productos incluyendo características y valores


Recommended Posts

Estoy intentando realizar una consulta a la base de datos de PrestaShop (versión 1.5.6.2) para exportar los productos incluyendo las características de este, pero no conozco mucho SQL/MySQL y al intervenir tantas tablas se me está haciendo un poco complejo..

 

Aunque la consulta es exclusiva según las características de cada tienda, supongo que es un caso común el usar características de productos pensando en que al almacenarse en campos independientes en la base de datos posteriormente se pueden consultar/exportar de forma automática, por lo que entiendo que esta consulta/duda no es nueva, pero por más que busco no doy con la solución..

 

Si alguien sabría un ejemplo de consulta tipo que poder modificar/adaptar sería muy interesante para necesidades como la mía. Si no a unas malas, cuando la consiga sacar os la paso por aquí ;)

 

Saludos cordiales y gracias!

Edited by enramos (see edit history)
Link to comment
Share on other sites

Creo que ya he conseguido solucionar gran parte del problema.. De momento tengo lo siguiente:

SELECT
ps_product.reference, ps_product.price,
ps_product_lang.name, ps_product_lang.description_short,
ps_category_lang.name AS categoría,
ps_feature_value_lang.value AS característica1
FROM ps_product
LEFT JOIN ps_product_lang ON ps_product.id_product = ps_product_lang.id_product
LEFT JOIN ps_feature_product ON ps_feature_product.id_product = ps_product.id_product
LEFT JOIN ps_feature_lang ON ps_feature_lang.id_feature = ps_feature_product.id_feature
LEFT JOIN ps_feature_value_lang ON ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value
LEFT JOIN ps_category_lang ON ps_product.id_category_default = ps_category_lang.id_category
WHERE ps_feature_lang.id_feature = 1
AND ps_product.active =1
AND ps_product_lang.id_lang =1
GROUP BY ps_product.id_product

Con esta consulta exporto la referencia del producto, el precio, el nombre, la descripción corta, la categoría principal y la primera característica del producto.

 

Ahora lo que necesito es extraer el resto de características en la misma consulta pero como cambia la condición (ps_feature_lang.id_feature = X) no se como hacerla.. 

Link to comment
Share on other sites

  • 2 years later...

Creo que ya he conseguido solucionar gran parte del problema.. De momento tengo lo siguiente:

SELECT
ps_product.reference, ps_product.price,
ps_product_lang.name, ps_product_lang.description_short,
ps_category_lang.name AS categoría,
ps_feature_value_lang.value AS característica1
FROM ps_product
LEFT JOIN ps_product_lang ON ps_product.id_product = ps_product_lang.id_product
LEFT JOIN ps_feature_product ON ps_feature_product.id_product = ps_product.id_product
LEFT JOIN ps_feature_lang ON ps_feature_lang.id_feature = ps_feature_product.id_feature
LEFT JOIN ps_feature_value_lang ON ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value
LEFT JOIN ps_category_lang ON ps_product.id_category_default = ps_category_lang.id_category
WHERE ps_feature_lang.id_feature = 1
AND ps_product.active =1
AND ps_product_lang.id_lang =1
GROUP BY ps_product.id_product

Con esta consulta exporto la referencia del producto, el precio, el nombre, la descripción corta, la categoría principal y la primera característica del producto.

 

Ahora lo que necesito es extraer el resto de características en la misma consulta pero como cambia la condición (ps_feature_lang.id_feature = X) no se como hacerla.. 

Tengo esta consulta, cómo agregar entonces el precio al por mayor y el porcentaje del IVA?

 

SELECT
a.`id_product`, b.`name` AS `name`, `reference`, a.`price` AS `price`, sa.`active` AS `active`
, shop.`name` AS `shopname`, a.`id_shop_default`, image_shop.`id_image` AS `id_image`, cl.`name` AS `name_category`, sa.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, sa.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`
FROM `ps_product` a 
LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 3 AND b.`id_shop` = 1)
 
LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0
AND sav.id_shop = 1  AND sav.id_shop_group = 0 )  JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default)
LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default)
LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default)
LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`)
LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product`) 
WHERE 1  
 
ORDER BY a.`id_product` ASC
  • Like 1
Link to comment
Share on other sites

  • 1 year later...

Llego medio tarde, pero tal vez a alguien más le sea útil la respuesta. Nunca usé la versión 1.5, pero sí la 1.6 y la consulta que realicé para extraer todas las funcionalidades con sus valores fue la siguiente:

SELECT p.id_product AS 'ID', pl.name AS 'Nombre', group_concat(cl.name SEPARATOR '&') AS 'Categorias', GROUP_CONCAT(DISTINCT fl.name, ':', fvl.value SEPARATOR '&') AS 'Facetados' 
FROM ps_product AS p 
LEFT JOIN ps_product_lang AS pl ON p.id_product = pl.id_product 
LEFT JOIN ps_feature_product AS fp ON p.id_product = fp.id_product 
LEFT JOIN ps_feature_lang AS fl ON fp.id_feature = fl.id_feature 
LEFT JOIN ps_feature_value AS fv ON fp.id_feature = fv.id_feature 
LEFT JOIN ps_feature_value_lang AS fvl ON fp.id_feature_value = fvl.id_feature_value 
LEFT JOIN ps_category_product AS c ON p.id_product = c.id_product 
LEFT JOIN ps_category_lang AS cl ON c.id_category = cl.id_category 
WHERE p.active = 1
GROUP BY p.id_product
 

Además de eso, la consulta extrae también todas las categorías asociadas a ese ID de producto, y sólo de los IDs de productos activos.

El separador de valores múltiples que uso es el "&", pero en SEPARATOR pueden modificarlo por ',' o el que gusten.

  • Like 1
Link to comment
Share on other sites

  • 2 years later...

Hola!, buen día para todos!

Necesito generar un cvs en prestashop que me muestre referencia de producto, nombre de producto y regla de iva, no tengo mucho conocimiento de SQL, si alguien me puede ayudar con este tema, gracias!

Link to comment
Share on other sites

3 hours ago, Jelizp said:

Hola!, buen día para todos!

Necesito generar un cvs en prestashop que me muestre referencia de producto, nombre de producto y regla de iva, no tengo mucho conocimiento de SQL, si alguien me puede ayudar con este tema, gracias!

Buenas, cómo estás?

No sé si por regla de IVA te referís al porcentaje de IVA o al ID del IVA, pero te comento las 2 alternativas.

Con % de IVA:

SELECT p.reference AS 'Referencia', pl.name AS 'Nombre', ROUND(t.rate, 2) AS 'Regla de IVA' 
FROM ps_product AS p 
LEFT JOIN ps_product_lang AS pl ON p.id_product = pl.id_product 
LEFT JOIN ps_tax AS t ON p.id_tax_rules_group = t.id_tax 
WHERE pl.id_lang = 1

Con ID de IVA:

SELECT p.reference AS 'Referencia', pl.name AS 'Nombre', p.id_tax_rules_group AS 'Regla de IVA' 
FROM ps_product AS p 
LEFT JOIN ps_product_lang AS pl ON p.id_product = pl.id_product 
WHERE pl.id_lang = 1

Saludos

  • Thanks 1
Link to comment
Share on other sites

  • 2 years later...

Hola, estoy intentando añadir la marca, pero no tengo ni idea como ponerlo, tengo algo así, esta mal.

SELECT p.id_product AS 'ID', pl.name AS 'Nombre',  p.reference AS 'referencia', m.name AS 'Marca', p.weight AS 'peso'
FROM prstshp_product AS p 
LEFT JOIN prstshp_product_lang AS pl ON p.id_product = pl.id_product 
LEFT JOIN prstshp_feature_product AS fp ON p.id_product = fp.id_product 
LEFT JOIN prstshp_feature_lang AS fl ON fp.id_feature = fl.id_feature
LEFT JOIN prstshp_manufacturer AS m ON m.id_manufacturer = m.name
LEFT JOIN prstshp_feature_value AS fv ON fp.id_feature = fv.id_feature 
LEFT JOIN prstshp_feature_value_lang AS fvl ON fp.id_feature_value = fvl.id_feature_value 
LEFT JOIN prstshp_category_product AS c ON p.id_product = c.id_product 
LEFT JOIN prstshp_category_lang AS cl ON c.id_category = cl.id_category 
WHERE p.active = 1
GROUP BY p.id_product

 

Link to comment
Share on other sites

  • 4 months later...

Pues a mí me facilitó mucho ese trabajo Prestools, es un script que funciona dentro de Prestashop y tiene muchas funcionalidades, entre otras sacar listados csv con los datos que necesitas, sin hacer consultas sql. Es gratuito en un 95% de sus funciones.

 

  • Thanks 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...