我无法为这个问题找到一个干净的解决方案。
如果我们有一些产品:
id name price store
----------------------------------------------
1 product1 10.30 inmyzone.com
2 product2 47 googol.su
3 product3 .99 Nederlandse Winkel
4 product4 321,09 Nederlandse Winkel
还有一些属性:
id name
----------------------------------------------
1 brand
2 color
这些值与此相关:
product_id property_id value
----------------------------------------------
1 1 Great Stuff
2 1 Best Brand Name Ever
3 1 Great Stuff
4 1 So bad, it's good
1 2 Red
2 2 Blue
3 2 Blue
我如何找到所有价格,品牌,商店和颜色
`store` ='Nederlandse Winkel'
`color` ='blue'和`store` ='Nederlandse Winkel'
`price`> = 10 AND`price`< = 10
到目前为止我一直在做什么。
如果我想要所有颜色和商店,如果`brand` ='Great Stuff'。
1将表连接到完整的产品表和WHERE(实际上是HAVING,因为它在编程上更容易)我排除了所有不必要的数据。
id name price store brand color
--------------------------------------------------------------------------------------------
1 product1 10.30 inmyzone.com Great Stuff red
3 product3 .99 Nederlandse Winkel Great Stuff blue
2我执行此查询:
SELECT "color" AS filter_name, 'color' AS filter_value
FROM ({product table of step 1}) AS products
GROUP BY filter_value
UNION ALL
SELECT "store" AS filter_name, 'store' AS filter_value
FROM ({product table of step 1}) AS products
GROUP BY filter_value
这种方法的问题在于我必须为每个过滤器重新创建步骤1的产品表。还有其他选择吗?
谢谢
更新:这就是结果
color blue
color red
store inmyzone.com
store Nederlandse Winkel
只要它包含所有可能的选项,它输出的方式并不重要。
答案 0 :(得分:0)
一种方法是使用聚合和having
子句:
select pv.product_id
from (<your step1 query here>) pv
group by pv.product_id
然后添加having
条款,例如:
having sum(store = 'Nederlandse Winkel') > 0
having sum(store = 'Nederlandse Winkel') > 0 and sum(color = 'blue') > 0
我不了解第三个条件。