如何使用addAttributeToFilter或类似函数在Magento集合中创建嵌套的Where子句

时间:2011-08-01 14:45:45

标签: php zend-framework magento where-clause

我必须使用多个嵌套的OR和AND标准来过滤产品集合。我尝试使用纯SQL语句来做这个,我想我可以做到,但是当我今天完成工作时,我想也许有人会在这里找到更好的解决方案,明天我会醒来并得到答案:P。< / p>

我的问题是Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection类提供的addAttributeToFilter()方法可以只将nest子句嵌套两次 - 所以我可以拥有

(cond1 OR cond2 OR cond3) AND (cond4 OR cond5) AND cond6

但不是

cond1 AND (cond2 OR(cond3 AND cond4))

(或者我不知道如何做到这一点)。

正如我所说,我开始使用纯SQL语句来获取产品ID,因此我可以使用'in'条件添加AddAttributeToFilter。但是Magento db真是太乱了!我的意思是,你必须通过googol表跟踪每个关系,这很好:P。

我认为Zend集合对象可能有一些我需要的功能,但我不太熟悉Zend(我的不好)。

那么,有人会让我免于编写300行SQL查询吗?我一直想这样做,但我想我可以稍微推迟一下:)。

干杯, Maćko

编辑: 我必须获得有关产品的信息,在这种组合条件下,将有来自第三方模块的一些自定义选项,如:目标年龄等。我想我将不得不在PHP方面做,但我不太喜欢它 - 目前有37种产品可以初步过滤,但是如果有1000种产品符合这些初始标准呢?

1 个答案:

答案 0 :(得分:2)

有关您尝试检索的信息的更多细节会有所帮助。 Magento可能会为您希望的特定数据生成一些表格,但这很大程度上取决于您的具体情况。

否则,您可以使用较低级别的Zend DB类来构建条件,但无论如何都会破坏数据库的抽象,因此它可能没什么帮助。查看平面目录和其他索引以查看这些示例。

希望有所帮助!

谢谢, 乔


听起来你关心的是运行查询的效率和任何事情一样多。如果是这种情况,请确保明智地对表进行索引(使用索引和内部查询来选择尽可能少的记录)。

这听起来像是一个自定义SQL查询(甚至是类似于Magento的重新生成的索引)可能是这里的方式。