SELECT T1.id_pdt, T1.nom_pdt, T1.att1, T2.att2, T3.att3, T1.prix, T2.prix, T3.prix
FROM taTable as T1 INNER JOIN taTable as T2 ON (T1.id = T2.id)
INNER JOIN taTable as T3 ON (T2.id = T3.id)
where T1.att1 not null And T2.att2 not null And T3.att3 not null
Mais le schéma me semble bizarre... Une table différente par attribut ?Code : Tout sélectionner
SELECT pa.id_product,
(SELECT pa.price FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =31) as prixA,
(SELECT pa.price FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =32) as prixB,
(SELECT pa.price FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =33) as prixC,
(SELECT pa.quantity FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =31) as QteA,
(SELECT pa.quantity FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =32) as QteB,
(SELECT pa.quantity FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =33) as QteC
FROM product_attribute pa
LEFT JOIN product_lang pl ON (pa.id_product = pl.id_product)
LEFT JOIN product_attribute_combination pac ON (pa.id_product_attribute = pac.id_product_attribute)
LEFT JOIN attribute_lang al ON (pac.id_attribute = al.id_attribute)
WHERE al.id_lang =2 AND pl.id_lang = 2 AND pa.`id_product` IN ('.$tab['id_product'].')
GROUP BY pac.id_product_attribute
ORDER BY pl.name ASCCode : Tout sélectionner
SELECT pa.id_product,
(SELECT pa.price FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =31) as prix1,
(SELECT pa.price FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =32) as prix2,
(SELECT pa.price FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =33) as prix3,
(SELECT pa.quantity FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =31) as Qte1,
(SELECT pa.quantity FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =32) as Qte2,
(SELECT pa.quantity FROM product_attribute pa WHERE pa.id_product_attribute =pac.id_product_attribute AND pac.id_attribute =33) as Qte3
FROM product_attribute pa
LEFT JOIN product_lang pl ON (pa.id_product = pl.id_product)
LEFT JOIN product_attribute_combination pac ON (pa.id_product_attribute = pac.id_product_attribute)
LEFT JOIN attribute_lang al ON (pac.id_attribute = al.id_attribute)
WHERE al.id_lang =2 AND pl.id_lang = 2
GROUP BY pac.id_product_attribute
ORDER BY pl.name ASC
SELECT
(SELECT price FROM product_attribute AS pa WHERE pa.id_product = p.id AND pa.id_product_attribute = 31) AS price31,
(SELECT price FROM product_attribute AS pa WHERE pa.id_product = p.id AND pa.id_product_attribute = 32) AS price32,
(SELECT price FROM product_attribute AS pa WHERE pa.id_product = p.id AND pa.id_product_attribute = 33) AS price33,
(SELECT quantity FROM product_attribute AS pa WHERE pa.id_product = p.id AND pa.id_product_attribute = 31) AS quantity31,
(SELECT quantity FROM product_attribute AS pa WHERE pa.id_product = p.id AND pa.id_product_attribute = 32) AS quantity32,
(SELECT quantity FROM product_attribute AS pa WHERE pa.id_product = p.id AND pa.id_product_attribute = 33) AS quantity33
FROM product AS p
ORDER BY p.id ASC
J'obtiens bien les résultats correctement pour chacun de mes produits test.SELECT
P.id,
( case when pa.id_product_attribute = 31 THEN price ELSE 0 ) as price31,
( case when pa.id_product_attribute = 32 THEN price ELSE 0 ) as price32,
( case when pa.id_product_attribute = 33 THEN price ELSE 0 ) as price33
[...] IDEM POUR LES 3 AUTRES CALCUS...
FROM product P
INNER JOIN product_attribute PA on PA.id_product = p.id
WHERE pa.id_product_attribute in ( 31, 32, 33)
order by P.id ASC
Faudrait peut etre remplacer INNER JOIN par LEFT OUTER JOIN en fonction du cas...
Si la mienne ne te donne pas résultat c'est donc que ton jeu de données est incompatible avec ce que tu souhaites.Avec ta requête cela va lui retourner la même chose que ce qu'il ne veut pas (cf premier post) vu que c'est ta clause WHERE de requête principale qui génère les n-uplets à traiter.
Cela dit la clause CASE ... WHEN existe pour MySQL et j'aurai appris un truc sympatoche et utile.
SELECT
P.id,
( case when pa.id_product_attribute = 31 THEN price ELSE 0 END ) AS price31,
( case when pa.id_product_attribute = 32 THEN price ELSE 0 END ) AS price32,
( case when pa.id_product_attribute = 33 THEN price ELSE 0 END ) AS price33
[...]
FROM product P
INNER JOIN product_attribute PA ON PA.id_product = p.id
WHERE pa.id_product_attribute IN ( 31, 32, 33)
GROUP BY xxxx --en fonction de ce qui sort
ORDER BY P.id ASC