Ejemplo de consulta cruzada SQL

Una consulta cruzada es una consulta MySQL que toma datos de varias tablas que comparten campos. Por ejemplo, la tabla ps_product contiene un campo id_product, al igual que la tabla ps_product_lang.

En la siguientes consultas intervienen varias tablas de Prestashop. Hemos tenido que hacer varias consultas parecidas para nuestros módulos personalizados de la versión 1.4, y nos encontramos actualizando estos módulos a la nueva versión (1.6), con lo que hemos de revisar estas consultas.

Para leer sobre más formas de combinar las tablas (INNER JOIN, RIGHT JOIN): https://es.wikipedia.org/wiki/Join

Os invito a probar estas consultas en vuestro PHPMyAdmin.

SELECT DISTINCT ppl.id_product AS IDPRODUCT,
ppl.name AS NAME,
pp.active AS ACTIVE,
pp.reference AS REFERENCIA,

pcl.name AS NOMBRECAT

FROM ps_product_lang ppl

LEFT JOIN ps_product pp ON ppl.id_product=pp.id_product
LEFT JOIN ps_category_lang pcl ON pp.id_category_default=pcl.id_category

WHERE ppl.id_lang=3 AND pcl.id_lang=3
ORDER BY pp.reference ASC

**

SELECT DISTINCT pal.name AS PALNAME,
pal.id_attribute AS PALIDATTRIBUTE,
ppac.id_product_attribute AS PPACIDPRODATTRIBUTE,
ppa.id_product AS PPAIDPROD

FROM ps_attribute_lang pal

LEFT JOIN ps_product_attribute_combination ppac ON pal.id_attribute=ppac.id_attribute
LEFT JOIN ps_product_attribute ppa ON ppac.id_product_attribute=ppa.id_product_attribute

WHERE pal.id_lang=1
ORDER BY ppa.id_product ASC

**

SELECT DISTINCT pal.name AS PALNAME,
pal.id_attribute AS PALIDATTRIBUTE,
ppac.id_product_attribute AS PPACIDPRODATTRIBUTE,
ppa.id_product AS PPAIDPROD,
pa.id_attribute_group AS PAIDATTRIBGROUP

FROM ps_attribute_lang pal

LEFT JOIN ps_product_attribute_combination ppac ON pal.id_attribute=ppac.id_attribute 
LEFT JOIN ps_product_attribute ppa ON ppac.id_product_attribute=ppa.id_product_attribute
LEFT JOIN ps_attribute pa ON pal.id_attribute=pa.id_attribute

WHERE pal.id_lang=1 AND pag.id_group=4
ORDER BY ppa.id_product ASC

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*