2011-01-30 18 views
2

我已經使我們的系統正確返回信息,但是現在我們在應用過濾器時存在返回信息的問題。查詢有問題是:如何從其他表中返回產品及其所有屬性,同時通過其中一個過濾

SELECT `products`.* 
CONCAT('[', GROUP_CONCAT(DISTINCT '{', '"id":"', `product_variations`.`id`, '"', ',', '"id_product":"', `product_variations`.`id_product`, '"', ',', '"sku":"', `product_variations`.`sku`, '"', ',', '"options":"', `product_variations`.`options`, '"', ',', '"quantity":"', `product_variations`.`quantity`, '"', ',', '"price":"', `product_variations`.`price`, '"', '}' SEPARATOR ','), ']') as `_variations`, 
CONCAT('[', GROUP_CONCAT(DISTINCT '{', '"id":"', `product_images`.`id`, '"', ',', '"id_product":"', `product_images`.`id_product`, '"', ',', '"location":"', `product_images`.`location`, '"', ',', '"order":"', `product_images`.`order`, '"', ',', '"variation_key":"', `product_images`.`variation_key`, '"', ',', '"variation_values":"', `product_images`.`variation_values`, '"', '}' SEPARATOR ','), ']') as `_images`, 
CONCAT('[', GROUP_CONCAT(DISTINCT '{', '"id":"', `product_attributes`.`id`, '"', ',', '"id_product":"', `product_attributes`.`id_product`, '"', ',', '"key":"', `product_attributes`.`key`, '"', ',', '"value":"', `product_attributes`.`value`, '"', '}' SEPARATOR ','), ']') as `_attributes` 
FROM (`products`) 
LEFT JOIN product_variations ON products.id = product_variations.id_product 
LEFT JOIN product_images ON products.id = product_images.id_product 
LEFT JOIN product_attributes ON products.id = product_attributes.id_product 
WHERE (`products`.`id_category` = "11" OR `products`.`id_category` = "12" OR `products`.`id_category` = "9") 
AND (product_attributes.key = "color" AND product_attributes.value IN ("Red","Orange")) 
AND (product_attributes.key = "size" AND product_attributes.value IN ("L","M")) 
GROUP BY `products`.`id` 
LIMIT 10 

忽略什麼,我試圖去工作CONCAT東西(返回屬性等作爲JSON數據),例如,如果一個產品具有以下屬性:

color=Red 
color=Orange 
color=Blue 
size=L 
size=M 
size=S 

所以,如果我想顯示其中

color=Red OR color=Orange 
AND 
size=L OR size=M 

該產品將被退回的產品, 問題obviusly就在於

AND (product_attributes.key = "color" 
AND (product_attributes.key = "size" 

不可能是真的,但我想這是任何一個孩子的,如果只是1過濾器,它工作正常,但多個「不同的」過濾器和它打破,

而且,將只返回通過過濾器的問題屬性。

我希望它返回已通過過濾器的產品的所有屬性,我越看越這個越多,我認爲它是不可能的。有人知道這樣做的方法嗎?

+0

使用組由不允許返回所有屬性 – ajreal 2011-01-30 03:06:02

回答

1

你需要編寫邏輯在HAVING條款,例如:

HAVING COUNT(IF(product_attributes.key = "color" AND product_attributes.value IN ("Red","Orange"), 
    1, NULL)) > 0 
    AND COUNT(IF(product_attributes.key = "size" AND product_attributes.value IN ("L","M"), 
    1, NULL)) > 0 
+0

哇,這對我的問題的兩個帳戶的工作:d muchos感謝,你已經救了我幾個小時的酷刑試圖找出自己:) – 2011-01-30 03:40:09

相關問題