Avisos
Vaciar todo

exportacion masiva mediante consulta sql

15 Respuestas
3 Usuarios
0 Reactions
2,288 Visitas
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

Hola a todos.

Estoy intentando hacer una exportación masiva de productos para un comparador y para facebook. El problema es que casi todos mis productos tienen atributos y despues de mucho buscar, estoy desesperada porque no encuentro nada que funcione (y sea gratis).
He leído sobre gente que en el pasado ha hecho exportaciones de forma masiva con consultas sql pero no soy capaz de generar una consulta que funcione.

Los datos que necesito exportar, teniendo en cuenta que tengo productos con atributos (y en cada atributo referencia, ean13 y precio diferente) son:

nombre
Atributo
Valor del atributo
descripción corta
referencia de proveedor
ean13
url producto
url imagen
precio de venta con impuestos

Espero que podais ayudarme, no se nada de lenguaje sql

URL del sitio: Contenido solo visible a usuarios registrados


 
Respondido : 11/03/2017 8:29 pm
Pepe
 Pepe
Respuestas: 41115
Illustrious Member Admin
 

Hola Ana.

Prueba lo siguiente:
.- Accede a Parámetros Avanzados -> Consultas MySQL
.- Pulsa en Añadir una nueva consulta SQL

Nombre de la consulta SQL: Añade el nombre que quieras para tener identificado
Consulta SQL, añade lo siguiente:

SELECT pat.id_product
    , prd.reference
    , GROUP_CONCAT(DISTINCT(concat(atgl.name, ":", atg.group_type, ":", atg.position)) SEPARATOR ", ")
    , GROUP_CONCAT(DISTINCT(concat(pal.name, ":", atg.position)) SEPARATOR ", ")
    , pat.supplier_reference
    , pat.reference
 FROM ps_product_attribute pat
INNER JOIN ps_product prd ON (prd.id_product = pat.id_product)
 LEFT JOIN ps_product_attribute_combination pac ON (pat.id_product_attribute = pac.id_product_attribute)
 LEFT JOIN ps_attribute att ON (pac.id_attribute = att.id_attribute)
 LEFT JOIN ps_attribute_group atg ON ( atg.id_attribute_group = att.id_attribute_group)
 LEFT JOIN ps_attribute_group_lang atgl ON ( atgl.id_attribute_group = atg.id_attribute_group)
 LEFT JOIN ps_attribute_lang pal ON (pac.id_attribute = pal.id_attribute AND pal.id_lang = atgl.id_lang)
WHERE atgl.id_lang = 1
GROUP BY pat.id_product_attribute
ORDER BY pat.id_product, pac.id_attribute

Nota: tienes que modificar ps_attribute por la extensión que tienen tus tablas de prestashop.

¿ como localizar la extensión de tus talabas ?, fácil, en la misma ventana veras el apartado Lista de tablas de MySQL, en esa lista puedes encontrar la extensión de tus tablas.

.- Guarda los cambios
.- selecciona exportar en la consulta que creaste.

Comprueba si son esos los resultados que buscabas

Un saludo


 
Respondido : 11/03/2017 10:22 pm
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

Me saca bien las referencias de proveedor, las id del producto (que no las quiero, solo quiero el nombre), el atributo y valor del atributo... el resto nada. ¿Como completo la consulta?

descripción corta
referencia de proveedor
ean13
url producto
url imagen
precio de venta con impuestos


 
Respondido : 12/03/2017 8:03 pm
Pepe
 Pepe
Respuestas: 41115
Illustrious Member Admin
 

Hola Ana.

Con la consulta que te pase puedes exportar todas las combinaciones, luego desde catalogo -> productos, puedes exportar los datos que te faltan pulsando en el icono de exportar:

Un saludo


 
Respondido : 13/03/2017 12:25 pm
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

No me los exporta en el mismo orden, así que no puedo copiar unas columnas de un archivo y pasarlos a otro para completarlo. Además, la exportación de productos tiene el inconveniente de que, no se por qué, pero parte de los precios me los saca en formato de fecha.
Tampoco saca la url del producto ni el ean13.
Necesito todos los datos en el mismo archivo:
nombre
Atributo
Valor del atributo
descripción corta
referencia de proveedor
ean13
url producto
url imagen
precio de venta con impuestos


 
Respondido : 13/03/2017 1:54 pm
Pepe
 Pepe
Respuestas: 41115
Illustrious Member Admin
 

Hola Ana.

Adjunto tienes un modulo para la exportación de productos que te saca todos los datos, menos las variaciones que las puedes sacar de la consulta que te pase anteriormente:

Luego con exel podrías relacionar los IDE de los productos y con alguna función que te añada las combinaciones para ese archivo.

Un saludo


 
Respondido : 13/03/2017 2:23 pm
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

las url estan incompletas y los ean13 no salen


 
Respondido : 13/03/2017 2:38 pm
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

Hola

Si quieres el nombre se complica un poco la consulta porque se tomará de la tabla de idiomas, sin embargo el ean13 si que lo obtienes, he modificado la consulta, relacionado con el idioma 1 (prdlang.id_shop = 1)

Verifica la siguiente consulta:

SELECT pat.id_product
	, prd.ean13
	, prdlang.name
    , prd.reference
    , GROUP_CONCAT(DISTINCT(concat(atgl.name, ":", atg.group_type, ":", atg.POSITION)) SEPARATOR ", ")
    , GROUP_CONCAT(DISTINCT(concat(pal.name, ":", atg.POSITION)) SEPARATOR ", ")
    , pat.supplier_reference
    , pat.reference
 FROM ps_product_attribute pat
INNER JOIN ps_product prd ON (prd.id_product = pat.id_product)
INNER JOIN ps_product_lang prdlang ON (prd.id_product = prdlang.id_product and prdlang.id_shop = 1)
 LEFT JOIN ps_product_attribute_combination pac ON (pat.id_product_attribute = pac.id_product_attribute)
 LEFT JOIN ps_attribute att ON (pac.id_attribute = att.id_attribute)
 LEFT JOIN ps_attribute_group atg ON ( atg.id_attribute_group = att.id_attribute_group)
 LEFT JOIN ps_attribute_group_lang atgl ON ( atgl.id_attribute_group = atg.id_attribute_group)
 LEFT JOIN ps_attribute_lang pal ON (pac.id_attribute = pal.id_attribute AND pal.id_lang = atgl.id_lang)
WHERE atgl.id_lang = 1
GROUP BY pat.id_product_attribute
ORDER BY pat.id_product, pac.id_attribute

Saludos.


 
Respondido : 13/03/2017 5:33 pm
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

el ean13 sigue sin salir... ten en cuenta que al tener atributos muchos de mis productos los ean13 válidos son los de las combinaciones, los asociados al atributo... además seguimos sin tener la url completa del producto ni de las imagenes


 
Respondido : 13/03/2017 6:45 pm
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

HOla

En la consulta anterior cambia

prd.ean13

por

pat.ean13

Esto te dará el ean13 de las combinaciones, cuando dices url te refieres a una careacterística que has definido?, no hay campo url para el producto, las imágenes son por combinación o es a nivel del producto.

La consulta se puede volver más compleja si se agrega nuevas tablas, tal vez si vas a estar haciendo siempre este tipo de trabajo si que sea bueno evaluar algún módulo de exportación, revisa:
https://addons.prestashop.com/es/importacion-exportacion-de-datos/6253-export-products.html

Saludos.
https://addons.prestashop.com/es/importacion-exportacion-de-datos/6253-export-products.html


 
Respondido : 13/03/2017 11:20 pm
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

Las imágenes a nivel de producto puedan servir.
La importación va a ser ahora porque una vez creado el archivo no es tan complicado mantenerlo manualmente con el nivel de cambios que estoy teniendo. Más adelante, si veo que se me complica, miraría los módulos. De todas formas, alguno lo he probado pero también me ha dado problemas, especialmente con todo lo relacionado con las combinaciones.
Las url, solo me saca la parte reescrita, pero no me saca la raíz. Es decir, me da como resultado:
261-planet-pet-snack-tiras-pollo.html
cuando la url que necesito es:

friendlypet.es/shop/es/snacks-y-compementos/261-planet-pet-snack-tiras-pollo.html

Este problema ya lo tuve con el feed de google y lo solucioné añadiendo una regla a la importación, pero ahora no se como arreglarlo.
Me veo creando el csv a mano y es un curro de la leche...


 
Respondido : 14/03/2017 11:43 am
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

Hola

Para el tema de url , lo que quieres es la url absoluta, pero esto se puede formar en base a la url de tu sitio y la url de la categoría, ya que PrestaShop no almacena urls absolutas, revisa:
https://www.prestashop.com/forums/topic/144664-solved-export-product-urls/

Esta concatenación la puedes realizar ya en tu CSV o en Excel, no es necesario que sea parte de la consulta.

En tu consulta tendrías que añadir la categoría y además las tablas de imágenes relacionadas, si te complicas con esto te sugiero consultar a un desarrollador ya que la consulta podría complicarse.

Saludos.


 
Respondido : 14/03/2017 5:20 pm
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

¿Debo entender entonces que la consulta sql que pido no es viable? ¿Necesito pagar por un módulo o un desarrollador para hacer una exportación completa de mis productos con combinaciones? Prefiero echarle un mes de trabajo y crear el csv yo sola, pero me sorprendería que prestashop permita las importaciones en csv y luego de problemas con las exportaciones ¿Es así como funciona?


 
Respondido : 14/03/2017 5:31 pm
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

Hola

La consulta que quieres si es viable, lo único que es compleja, PrestaShop es gratis y el código es abierto, sin embargo hay cosas que no vienen implementadas y es allí en donde entran los módulos externos que en la mayoría de los casos son de pago.

Para el caso de las imágenes, en la base de datos sólo se almacena el ID, luego PrestaShop resuelve este ID y ubica la imagen en una carpeta, tu consulta para obtener la ID de la imagen sería agregando la tabla ps_image

SELECT pat.id_product
	, prd.ean13
	, img.id_image
	, prdlang.name
    , prd.reference
    , GROUP_CONCAT(DISTINCT(concat(atgl.name, ":", atg.group_type, ":", atg.POSITION)) SEPARATOR ", ")
    , GROUP_CONCAT(DISTINCT(concat(pal.name, ":", atg.POSITION)) SEPARATOR ", ")
    , pat.supplier_reference
    , pat.reference
 FROM ps_product_attribute pat
INNER JOIN ps_product prd ON (prd.id_product = pat.id_product)
INNER JOIN ps_product_lang prdlang ON (prd.id_product = prdlang.id_product and prdlang.id_shop = 1)
LEFT JOIN ps_image img ON (prd.id_product = img.id_product)
 LEFT JOIN ps_product_attribute_combination pac ON (pat.id_product_attribute = pac.id_product_attribute)
 LEFT JOIN ps_attribute att ON (pac.id_attribute = att.id_attribute)
 LEFT JOIN ps_attribute_group atg ON ( atg.id_attribute_group = att.id_attribute_group)
 LEFT JOIN ps_attribute_group_lang atgl ON ( atgl.id_attribute_group = atg.id_attribute_group)
 LEFT JOIN ps_attribute_lang pal ON (pac.id_attribute = pal.id_attribute AND pal.id_lang = atgl.id_lang)
WHERE atgl.id_lang = 1
GROUP BY pat.id_product_attribute
ORDER BY pat.id_product, pac.id_attribute

Si quieres ver la imagen tendrías que crear la url, revisa:
https://www.prestashop.com/forums/topic/83266-in-what-table-is-the-reference-to-the-product-image-file-name/

A esto me refería cuando te comento que se vuelve complejo, si no conoces mucho de código.

Lo que podrías evaluar es probar exportar por partes para que no lo resuelvas todo en una sola consulta, por ejemplo exporta desde PrestaShop con algunos campos de productos, y luego únelos con el de esta consulta.

Saludos.


 
Respondido : 14/03/2017 8:52 pm
ANA
 ANA
Respuestas: 84
Trusted Member
Topic starter
 

ok, veré a ver qué puedo hacer


 
Respondido : 14/03/2017 9:06 pm