id | product_id | option | option value
-------------------------------------------
1 | 3 | size | m
2 | 3 | color | red
3 | 3 | brand | apple
4 | 5 | color | red
5 | 5 | weight | 16m
6 | 6 | size | m
我有两个产品product_id [3,5]
现在我正在使用选项值过滤此产品
我的过滤器option_value [m]
在这里,m
option_value
在product_id 3
中存在,但不在product_id 5
中,因此仅显示product_id 3
再次过滤option_value [red]
在这里,red
option_value
在product_id 3 and 5
的存在,所以我所有获取的产品都显示为product_id 3,5
最后,过滤option_value [m,red]
在这里,m
和red
option_value
在product_id 3
中存在,但m
option_value
在product_id 5
和red
中存在
option_value
中没有product_id 5
,因此请将product_id显示为空白
这意味着,我得到的选项值与过滤器option_value
如何编写此mysql查询?
答案 0 :(得分:0)
此处是我的过滤器option_value [m],product_id中存在m个option_value 3,但没有出现在product_id 5中,因此仅显示product_id 3
查询
SELECT
Table1.product_id
FROM
Table1
WHERE
table1.product_id IN(3, 5)
GROUP BY
Table1.product_id
HAVING
SUM(Table1.option_value = 'm') = 1
结果
| product_id |
|------------|
| 3 |
参见演示http://sqlfiddle.com/#!9/17e393/8
同样,在此处过滤option_value [红色],在其中存在红色option_value product_id 3和5,所以我所有获取的产品都显示为product_id 3,5
查询
SELECT
Table1.product_id
FROM
Table1
WHERE
table1.product_id IN(3, 5)
GROUP BY
Table1.product_id
HAVING
SUM(Table1.option_value = 'red') = 1
结果
| product_id |
|------------|
| 3 |
| 5 |