按产品选项值过滤产品(MySQL查询)

时间:2018-08-23 17:14:44

标签: php mysql laravel

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_valueproduct_id 3中存在,但不在product_id 5中,因此仅显示product_id 3

再次过滤option_value [red] 在这里,red option_valueproduct_id 3 and 5的存在,所以我所有获取的产品都显示为product_id 3,5

最后,过滤option_value [m,red] 在这里,mred option_valueproduct_id 3中存在,但m option_valueproduct_id 5red中存在 option_value中没有product_id 5,因此请将product_id显示为空白 这意味着,我得到的选项值与过滤器option_value

相同的产品

如何编写此mysql查询?

1 个答案:

答案 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 |

参见演示http://sqlfiddle.com/#!9/17e393/9