我有一个带有属性系统的产品目录。
我想创建一个允许客户按属性浏览产品的系统(例如在 Magento 上)。因此,我试图以编程方式检索具有特定值的属性(或具有许多特定值的许多属性)的产品列表(通过 ID 返回)。
它运行良好,但我的 SQL 查询很糟糕!
例如:如果我想检索具有这 3 个属性(和值)的产品列表,这是我当前的 SQL 查询:
- 第一个过滤器:id_attribut = 3 AND value = 'Lorem ipsum'
- 第二个过滤器:id_attribut = 4 AND value = 'Test2'
第三个过滤器:id_attribut = 2 AND value = 'Bar2'
选择 products.id 来自产品 加入 products_attributs ON products_attributs.id_product = products.id WHERE products_attributs.value = 'Lorem ipsum' AND products_attributs.id_attribut = 3 AND products_attributs.id_product ==> 返回 ID:25、27 在 ( 选择 id_product FROM products_attributes 其中 id_attribut = 4 AND 值 = 'Test2' ==> 返回 ID:27 AND id_product IN ( 选择 id_product FROM products_attributes 其中 id_attribut = 2 AND 值 = 'Bar2' ==> 返回 ID:27 ) )
结果:返回 ID 27(这是与客户选择的三个属性相对应的唯一产品)。
它运行良好,但不是很优雅,也不是很优化(想象一下,如果我有超过 10 个过滤器!)。
products_attributs 表:
------------------------------------------------- | 编号 | id_product | id_attribute | 价值 | ------------------------------------------------- | 1 | 25 | 1 | 福 | | 2 | 25 | 2 | 酒吧 | | 3 | 25 | 3 | Lorem ipsum | | 4 | 25 | 4 | 测试 | | 5 | 27 | 1 | Foo2 | | 6 | 27 | 2 | 酒吧2 | | 7 | 27 | 3 | Lorem ipsum | | 8 | 27 | 4 | 测试2 | | 9 | 28 | 1 | ...等| -------------------------------------------------
我该如何改进呢?
非常感谢!