我必须使用多个嵌套的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种产品符合这些初始标准呢?
答案 0 :(得分:2)
有关您尝试检索的信息的更多细节会有所帮助。 Magento可能会为您希望的特定数据生成一些表格,但这很大程度上取决于您的具体情况。
否则,您可以使用较低级别的Zend DB类来构建条件,但无论如何都会破坏数据库的抽象,因此它可能没什么帮助。查看平面目录和其他索引以查看这些示例。
希望有所帮助!
谢谢, 乔
听起来你关心的是运行查询的效率和任何事情一样多。如果是这种情况,请确保明智地对表进行索引(使用索引和内部查询来选择尽可能少的记录)。
这听起来像是一个自定义SQL查询(甚至是类似于Magento的重新生成的索引)可能是这里的方式。