2015-03-25 34 views
-1

我有笨無效的記錄從兩個表

SELECT * FROM (`products`) LEFT JOIN `products_attributes` ON `products_attributes`.`product_id` = `products`.`id` WHERE `products`.`category` = '1' AND `products`.`sub_category` = '1' AND `products_attributes`.`attribute_id` = '3' AND `products_attributes`.`attribute_id` = '4' AND `products_attributes`.`attribute_id` = '5' GROUP BY `products`.`id` 

產生這個sql語句加入,我有這些表

產品: enter image description here products_attributes:

enter image description here

我需要使用全部屬性來獲得產品因此,如果屬性是3,4,5,並且屬性是3,4,5,6,我將不會獲得產品id = 1,所以我將獲得產品id = 1。

+2

哪裏是你的代碼? – hek2mgl 2015-03-25 09:41:40

+1

嘗試使用'products_attributes.attribute_id IN(3,4,5)' – 2015-03-25 09:41:43

回答

1

您的sql查詢是完全錯誤的。你所做的是: 給我記錄attribute_id = 3 AND attribute_id = 4 AND attribute_id = 5 AND attribute_id = 6.一行不能同時等於3和4。 您需要的東西可以通過許多不同的方式實現。例如:

SELECT 
    products.id 
FROM products 

    JOIN products_attributes ON products_attributes.product_id = products.id 
WHERE 
    products.category = '1' 
    AND `products_attributes`.`attribute_id` IN (3,4,5,6) 


GROUP BY 
    products.id 
HAVING COUNT(DISTINCT `products_attributes`.`attribute_id`) = 4 

如果指定只是......那麼它將把所有的記錄誰已至少1這樣attribute_id

+0

您可能可以刪除第二個'WHERE'條件並用子查詢替換'4'以獲得不同屬性的總數。 – jeroen 2015-03-25 09:48:37

+0

如果我理解你的話,那麼不同的值可以不同,但​​在這種情況下總數可以相同。 – 2015-03-25 09:56:10

-1

試試這個:

SELECT * FROM (`products`) 
LEFT JOIN `products_attributes` 
ON `products_attributes`.`product_id` = `products`.`id` 
WHERE `products`.`category` = 1 
AND `products`.`sub_category` = 1 
AND `products_attributes`.`attribute_id` IN (3, 4, 5) 
GROUP BY `products`.`id` 
+0

*我需要獲得僅具有所有屬性的產品。*'IN'等同於'OR'語句,而不是'AND'。 – jeroen 2015-03-25 09:43:42