Jump to content

SOLUCIONADO! Ayuda Consulta SQL (modificar campos en idiomas)


Pack_12

Recommended Posts

Hola,

(Prestashop 1.7.5.2 + warehouse)

Debido a la mala práctica de crear muchos productos a partir de "Duplicar producto", resulta que me encuentro que muchísimos productos en el catálogo de "Portugués" tienen distintos títulos y otros campos con diferentes valores, concretamente con los valores del producto al que copió, pero como solo modifiqué posteriormente esos productos  en castellano, todos esos productos se han quedado con valores incorrectos.

Para solucionarlo, estoy tratando de averiguar una consulta sql para copiar los valores del idioma castellano (id_lang=1) a los valores del resto de idiomas. Muestro tabla aclaratoria:

image.thumb.png.385cbcd10cdd17089bd657a636f3e4b3.png

Por ejemplo en el id=2150, se ve que el "name" es el correcto. Busco la consulta que me permita copiar el valor de "name" de las filas donde id_lang=1 hacia el resto de id_lang para cada id de producto. ¿Alguien tiene idea?

Si encuentro la consulta ya podré actualizar también el resto de columnas (description, link_rewrite, etc..) cambiando el nombre de la columna en la consulta. 

Mil gracias de antemano!

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

Buenos días @Pack_12

Una consulta como la siguiente te serviría:

UPDATE `ps_product_lang` pl1, `ps_product_lang` pl2
SET pl1.`description` = pl2.`description`,pl1.`description_short` = pl2.`description_short`,pl1.`link_rewrite` = pl2.`link_rewrite`,pl1.`meta_title` = pl2.`meta_title`,pl1.`name` = pl2.`name`
WHERE pl2.`id_lang`=1 AND pl1.id_product = pl2.id_product;

No obstante, realiza antes un backup de tu tabla ps_product_lang.

Espero que te ayude.

Un saludo.

Edited by garciasanchezdani (see edit history)
  • Like 1
Link to comment
Share on other sites

Para estas cosas es buena practica crear una tabla temporal con los resultados según el criterio y luego hacer el update, eg

CREATE TEMPORARY TABLE temp_products_lang AS SELECT * FROM ps_product_lang WHERE id_lang = 1; 
UPDATE ps_product_lang u
LEFT JOIN temp_products_lang t ON t.id_product = u.id_product
SET u.description = t.description,
u.description_short = t.description_short,
u.link_rewrite = t.link_rewrite,
WHERE 1=1

No me cansare de comentar que siempre estas cosas es mejor hacerlas primero en un entorno de pruebas o después de haber hecho primero un respaldo de la base de datos o de la tabla en concreto donde se va a operar

  • Like 2
Link to comment
Share on other sites

  • 8 months later...

Buenas chicos, llevo tiempo con la tienda en multiidioma y dándole vueltas al tema de las traducciones.

Manejo algo de SQL pero lo que tengo en mente se me escapa.

Pongo un ejemplo, yo tengo todos los productos con los nombres en español, ej: "Camiseta Vans Nombremodelo Color"

Y quiero hacer el SQL como el que habeis comentado arriba para los demas idiomas pero que cambie el contenido dependiendo de unos filtros, como un buscar y reemplazar.

Ejemplo, lo tengo en Español, y lo copio al campo del Aleman todo, y luego quiero cambiar todos los "Camiseta" por "Subanstrujenwagen" (como se diga camiseta en Aleman :D) pero que deje el resto de la cadena "Camiseta Vans Nombremodelo Color" igual para que quedase "Subanstrujenwagen Vans Nombremodelo Color". ¿Esto es posible con una consulta SQL? Cambiar el parcial de un texto por unas cadenas predefinidas?

Si alguno me puede iluminar creo que sería de gran utilidad para toda la comunidad el poder traducir automáticamente los productos a todos los idiomas.

Un saludo!

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

Buenos días @infinityl

Lo que comentas sí es posible.

Utiliza una query como:

UPDATE `ps_product_lang`
SET `name` = replace(name, 'Camiseta', 'Subanstrujenwagen')
WHERE `id_lang` = 2;

En la query anterior, suponemos que el id_lang del idioma alemán es el 2.

Tendrías que preparar y ejecutar entonces tantas queries como reemplazos quieras hacer.

Un saludo.

  • Like 1
Link to comment
Share on other sites

12 hours ago, garciasanchezdani said:

Buenos días @infinityl

Lo que comentas sí es posible.

Utiliza una query como:


UPDATE `ps_product_lang`
SET `name` = replace(name, 'Camiseta', 'Subanstrujenwagen')
WHERE `id_lang` = 2;

En la query anterior, suponemos que el id_lang del idioma alemán es el 2.

Tendrías que preparar y ejecutar entonces tantas queries como reemplazos quieras hacer.

Un saludo.

Genial!! Pues es más facil de lo que pensaba!!! Mil gracias ^_^

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...