我正在开发电子商务应用程序,我很难选择将其用作过滤器的产品属性。
共有3个表格:
产品
id | 名称 | 活动 |
---|---|---|
1 | 气球XL红色 | 1|
2 | 气球L红色 | 1 |
3 | 气球XL绿色 | 1 |
4 | 气球S绿色 | <1>|
5 | 气球XL黑色 | 1 |
您可以使用子查询:
SELECT DISTINCT pv.value FROM propertyvalue pv
INNER JOIN product p ON p.id = pv.product
WHERE pv.property = 2 AND p.id IN (
SELECT product.id FROM product
INNER JOIN propertyvalue
ON product.id = propertyvalue.product
WHERE
(
propertyvalue.value = 'Black' AND propertyvalue.property = 1
OR
propertyvalue.value = 'Red' AND propertyvalue.property = 1
)
AND product.active = 1
)
基本上,子查询与产品筛选查询相同,唯一的区别是它只选择产品ID,而不是所有内容。这样,无论查询可能有多复杂(您在注释中提到了数百个属性(,您都可以用这样的语句包装该逻辑,并从该特定子集中提取一些唯一的值。