2014-09-29 41 views
0

我試圖解決問題。這是我的查詢>Mysql - WHERE具有相同標識符的多個值

SELECT p.* 
FROM `ps_product` p 
LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.id_shop = 1) 
LEFT JOIN `ps_product_attribute` pa ON (pa.`id_product` = p.`id_product`) 
LEFT JOIN `ps_product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) 

WHERE pl.`id_lang` = 2 
AND p.`id_category_default` = 25 
AND p.`active` = 1 
AND pac.`id_attribute` = 1714 
AND pac.`id_attribute` = 1736 
AND pac.`id_attribute` = 1737 
AND pac.`id_attribute` = 216 

ORDER BY p.`price` ASC 

我的問題是隻選擇包含所有4個id_attributes的產品。

表ps_product_attribute_combination包含兩列。 id_product_attribute和id_attribute。例如>

id_attribute/id_product_attribute 
1714    120 
1736    120 
1737    120 
216    120 

我希望解釋是succesfull :) 謝謝!

+0

那麼它不可能是1714 ** AND ** 1736,使用IN:'AND pac.id_attribute IN(1714,1736,1737,216)' – 2014-09-29 14:27:58

+0

IN不起作用。它必須具有全部4. IN即使不包含全部也將工作4. – Wr1t3r 2014-09-29 14:29:23

回答

0

你需要加入四次,每一個你想要的產品具有商品屬性:

SELECT p.* 
FROM `ps_product` p 
JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.id_shop = 1) 
JOIN `ps_product_attribute` pa ON (pa.`id_product` = p.`id_product`) 
JOIN `ps_product_attribute_combination` pac1 ON (pac1.`id_product_attribute` = pa.`id_product_attribute`) 
JOIN `ps_product_attribute_combination` pac2 ON (pac2.`id_product_attribute` = pa.`id_product_attribute`) 
JOIN `ps_product_attribute_combination` pac3 ON (pac3.`id_product_attribute` = pa.`id_product_attribute`) 
JOIN `ps_product_attribute_combination` pac4 ON (pac4.`id_product_attribute` = pa.`id_product_attribute`) 

WHERE pl.`id_lang` = 2 
AND p.`id_category_default` = 25 
AND p.`active` = 1 
AND pac1.`id_attribute` = 1714 
AND pac2.`id_attribute` = 1736 
AND pac3.`id_attribute` = 1737 
AND pac4.`id_attribute` = 216 

ORDER BY p.`price` ASC 
0

我認爲這應該工作:

SELECT p.* 
FROM `ps_product` p 
LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.id_shop = 1) 
LEFT JOIN `ps_product_attribute` pa ON (pa.`id_product` = p.`id_product`) 
LEFT JOIN `ps_product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) 

WHERE pl.`id_lang` = 2 
AND p.`id_category_default` = 25 
AND p.`active` = 1 
AND 
    (
     pac.`id_attribute` = 1714 
     OR 
     pac.`id_attribute` = 1736 
     OR 
     pac.`id_attribute` = 1737 
     OR 
     pac.`id_attribute` = 216 
    ) 

ORDER BY p.`price` ASC 
+0

這與IN相同,但是謝謝:) – Wr1t3r 2014-09-29 14:46:05

+0

是的,我誤解了你的問題。 RSanchez的方法是正確的。 – RayK 2014-09-29 14:47:12

相關問題