Trucos y Soluciones - Programación PHP

Es posible que si usamos la opción que ofrece Prestashop de relacionar un producto principal con un accesorio, nos interese que esa relación sea bidireccional. La opción ofrece prestashop pasa por que definamos la relación de manera explicita entre Producto1 -> Producto2 para luego definir la relación Producto2 -> Producto1. Una alternativa rápida que nos ahorra la mitad del trabajo es definir todas las relaciones que nos interese en una dirección, y luego usar una consulta en SQL para completar el ciclo.

Esto en principio no entraña ninguna dificultad si tenemos acceso directo a la base de datos y tenemos cierta soltura en el manejo de bases de datos.

La tabla que define la relación entre dos productos es la llamada ps_accesory. La tabla dispone de dos campos id_product_1 e id_product_1 y define la relación Producto1 -> Producto2. Añadir todos los pares complementarios es tan sencillo como ejecutar la consulta siguiente:

INSERT INTO ps_accessory (id_product_1, id_product_2)
SELECT p1.id_product_2, p1.id_product_1 FROM ps_accessory p1

 

Si la ejecutamos por primera vez y no teniamos ninguna entrada previa B->A se habrá generado todos los pares que queríamos, pero esto sólo funcionará la primera vez. En las siguientes ejecuciones se encontrará con registros ya incluidos que generarán un error de clave unica como el siguiente:

Error de SQL: Duplicate entry '' for key 1

 

Para solucionar esto debemos complicar un poco nuestra consulta y sólo incluir aquellos pares que no se encuentren registrados ya en nuestra tabla. Para ello hacemos uso de las clausulas JOIN que nos permitiran seleccionar sólo aquellos pares que nos falten por incluir. Eso los conseguimos con la siguiente consulta:

INSERT INTO ps_accessory (id_product_1, id_product_2)
SELECT p1.id_product_2, p1.id_product_1 FROM ps_accessory p1
LEFT JOIN ps_accessory p2 ON p1.id_product_1=p2.id_product_2 
AND p1.id_product_2=p2.id_product_1

WHERE p2.id_product_1 IS NULL

Esta consulta la podremos ejecutar cada vez que incluyamos nuevas relaciones entre productos y queramos completar las relaciones contrarias.

Espero que os haya resultado de utilidad.


Share Link: Bookmark Google Yahoo MyWeb Del.icio.us Digg Facebook Myspace Reddit Ma.gnolia Technorati Stumble Upon
Recuerda: Si te resulta util este artículo compártelo en tus redes sociales favoritas

Escribir un comentario


Código de seguridad
Refescar

Publicidad

Perfil

F·T
Ing. Informático

Univ. de Málaga

  • Ingeniería del Software
  • Proyectos Web 2.0
  • Aplicaciones Open Source
  • Consultoría SEO / SEM
  • Aplicaciones B2C / B2B
  • Redes Sociales
facebook twitter linkedin Delicious google-plus2
Skype Google Talk Gmail email rss
· Email: correo@ftorres.es
· Google+: Francisco Torres
· Facebook: FTorres
· Twitter: @ftorres.es
· Linkedin: ftorres_web
Contáctame

Últimos Artículos

Trabajos


Funcionando con joomla! gracias a 10·cero