Jump to content

Eliminando ciertas combinaciones desde SQL.


Environment

Recommended Posts

Estimados,

Los consulto porque tengo el siguiente problema.

Al importar combinaciones inicialmente no agregue el campo REFERENCE  para cada combinación.

 

Cuando quiero mediante CSV actualizar esas combinaciones se me duplican los valores, debido a que no hay referencia donde hacer el UPDATE. (Entonces me figura por ejemplo: dos atributos "rojo" con distinto precio)

 

Consulto a quienes conocen mejor las tablas y la forma de almacenamiento de datos de PS, podrían ayudarme a crear una instrucción SQL que elimine todas las combinaciones de un producto  dado, para luego importar desde 0 mediante mi CSV y así evitar duplicados en aquellas que no tienen referencia.

 

Sería en principio un DELETE  a la tabla donde se almacena la combinación en relación al producto.

 

Espero se entienda a lo que me refiero. A veces es un poco difícil explicarlo en un texto.

 

Como siempre gracias.

 

Link to comment
Share on other sites

Hola, yo cree un modulo que elimina las combinaciones pero para todos los productos de una determinada categoria, no se si puede ayudarte eso...

 

(Podrias eliminar un producto concreto si por ejemplo creas una categoria ficticia y asocias ese unico producto a esa categoria)

Link to comment
Share on other sites

Hola Piribipipi, gracias por contestar.

Estaría bueno si el modulo es  gratuito ver como armaste la instrucción SQL tal vez pueda modificarla para que realice un DELETE.

 

Mi teoría es esta (aunque puedo estar equivocado)

Realizar un DELETE a la tabla  ps_ (o el prefijo que hayas definido)product_atribute_combination relacionada  con ps_product_atribute a través de campo id_product_atribute (deberia  usar un JOIN) donde  ps_product_atribute.id_product IN () una serie de ids separados por ","

 

Hay muchas tablas adicionales que no se si tendría que editarlas (atribute_shop y otras) aunque a priori no parecería ser necesario.

 

Lo ves posible?

 

Me preocupa el tema del stock asociado cuando hay control de stock avanzado activo.

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

Si uso esta sentencia:

SELECT al.name FROM ps_attribute_lang al
INNER JOIN ps_product_attribute_combination pac ON pac.id_attribute=al.id_attribute
INNER JOIN ps_product_attribute pa ON pac.id_product_attribute = pa.id_product_attribute
WHERE pa.id_product IN (6021,6020,6022)


Obtengo las combinaciones de los productos 6021, 6020 y 6022 por ejemplo

Que pasa si convierto ese SELECT en un DELETE?

Alcanza con eliminar solo ese registro en ps_product_atributte_combination?

O debo eliminarlo de alguna otra tabla adicional?

 

Saludos

Link to comment
Share on other sites

Depués de jugar un rato  surgió esta instrucción para borrar todas las combinaciones para uno o más productos.

DELETE ppa.*,ppac.*,ppas.* FROM ps_product_attribute ppa
INNER JOIN ps_product_attribute_combination ppac ON ppa.id_product_attribute=ppac.id_product_attribute
INNER JOIN ps_product_attribute_shop ppas ON ppas.id_product_attribute=ppa.id_product_attribute
WHERE ppa.id_product=6021

Para que sirve esto?

En mi caso la utilizo para eliminar combinaciones de productos que fueron importadas mediante .CSV y se duplicaron por no haber definido el campo reference.

Entonces elimino todo para esos productos y vuelvo a importar el CSV para que queden solo las que quiero.

 

En el ejemplo usé el id 6021 porque estoy borrando combinaciones de solo ese producto

pero se podría agregar un IN() para más de un ID.

 

Si algún usr la quiere probar se aceptan criticas y mejoras.

 

RECUERDEN SIEMPRE BACKUPEAR LA BS ANTES DE TIRAR UNA CONSULTA COMO ESTA.(ASÍ DE ULTIMA PUEDEN HACER UN ROLLBACK)

Saludos

Link to comment
Share on other sites

  • 1 year later...

Llevo días buscando algo como esto....

Cómo haría entonces para eliminar TODAS las combinaciones de TODOS los productos?? Siguiendo la orden SQL que has utilizado, podría simplemente eliminar la última fila para que no afecte a un sólo producto, sino a todos? o poner un * en lugar del id de un producto??
 

DELETE ppa.*,ppac.*,ppas.* FROM ps_product_attribute ppa
INNER JOIN ps_product_attribute_combination ppac ON ppa.id_product_attribute=ppac.id_product_attribute
INNER JOIN ps_product_attribute_shop ppas ON ppas.id_product_attribute=ppa.id_product_attribute
WHERE ppa.id_product=6021


Por cierto, utilizo la versión 1.7.3 de Prestashop por si esto de alguna manera afecta al nombre de las tablas, etc.

Muchas gracias
 

Link to comment
Share on other sites

Al intentar ejecutar esta orden desde Parámetros Avanzados > Base de Datos > Gestor SQL
 

SELECT al.name FROM satun_attribute_lang al
INNER JOIN satun_product_attribute_combination pac ON pac.id_attribute=al.id_attribute
INNER JOIN satun_product_attribute pa ON pac.id_product_attribute = pa.id_product_attribute
WHERE pa.id_product=*

el prefijo de mis tablas es "satun_" en lugar de "ps_" por eso lo modifiqué en la consulta.

Pero me sale el siguiente error:
Error indefinido "checkedWhere"

Captura de pantalla 2018-10-16 a las 17.52.59.png

Edited by estorde
adjuntar imagen y editar el código utilizado (see edit history)
Link to comment
Share on other sites

  • 1 year later...

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