問:
我怎麼會碰到一些Red
和大小S
所有產品? 這將意味着我只得到產品2: Product (color:green,red => size:S)
MySQL的產品獲得多個過濾值
說明:
我遇到一個問題,選擇產品已應用特定的過濾器的數據庫。在下面你會發現我的表格,看到SQLfiddle爲真正的SQL。
表product
:
id | title
------------------------------
1 | Product (color:green => size:S)
2 | Product (color:green,red => size:S)
3 | Product (color:red)
表filter
id | name
------------
1 | Color
2 | Size
表filter_value
id | filter_id | name
---------------------
1 | 1 | green
2 | 1 | red
3 | 2 | S
表product_filter_value
id | product_id | filter_id | filter_value_id
---------------------------------------------
1 | 1 | 1 | 1
2 | 1 | 2 | 3
3 | 2 | 1 | 1
4 | 2 | 1 | 2
5 | 2 | 2 | 3
6 | 3 | 1 | 2
要選擇與過濾值red
所有產品,我運行此查詢:
# ALL COLOR RED
SELECT p.*
FROM product p
LEFT JOIN product_filter_value pfv ON p.id = pfv.product_id
WHERE (pfv.filter_id IN ('1'))
AND (pfv.filter_value_id IN ('2'))
GROUP BY p.id
LIMIT 10 OFFSET 0;
要選擇與過濾值S
所有產品,我運行此查詢:
# ALL SIZE S
SELECT p.*
FROM product p
LEFT JOIN product_filter_value pfv ON p.id = pfv.product_id
WHERE (pfv.filter_id IN ('2'))
AND (pfv.filter_value_id IN ('3'))
GROUP BY p.id
LIMIT 10 OFFSET 0;
但如何我會得到所有產品是Red
和大小S
? 這意味着我只能得到產品2: Product (color:green,red => size:S)
SQL小提琴確實打破發現,似乎沒有這麼好的服務。你的第一個例子似乎工作正常。我不確定你的第二個。我仍然需要filter_value_id參與。 – Timo002
第二個示例僅用於深入瞭解沒有過濾器會發生什麼情況。很高興第一個適合你。 – CGritton