我想根据该行的相对值过滤集合。例如,
SELECT * FROM table WHERE column_1 > column_2
我唯一知道如何在Magento做的事情就是
$q = Mage::getModel('table')->getCollection()
->addAttributeToFilter('column_1', array('gt' => $some_number));
或类似的东西。我只能给它一个值来比较,而不是列名。我还查看了Zend_Db_Select
子句中的where
方法,但没有找到任何有用的方法。我是否真的必须一直向下直接进行SQL查询(当然,不惜一切代价避免这种情况)? (我正在运行Magento 1.3.2.4)
谢谢。
答案 0 :(得分:3)
尝试类似
的内容$q = Mage::getModel('table')->getCollection()
->addAttributeToSelect('column_1')
->addAttributeToSelect('column_2')
->addAttributeToFilter('column_1', array('gt' => Zend_Db_Expr('`column_2`')));
答案 1 :(得分:0)
好的,这可能不是理想的解决方案,但它是获得所需内容的一种方式。
这就是我如何获得一系列正在销售的产品,其中产品的最终价格低于其价格。
我首先制作了一个新的空数据集。然后定义了我将要通过过滤我可以先循环的循环。之后我循环浏览了该集合,任何符合我要求的产品都被添加到空集合中。
$this->_itemCollection = new Varien_Data_Collection();
$collection = Mage::getResourceModel('catalog/product_collection');
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
$category = Mage::getModel('catalog/category')->load($this->getCategoryId());
$collection = $this->_addProductAttributesAndPrices($collection)
->addStoreFilter()
->addCategoryFilter($category)
->addAttributeToSort('position', 'asc');
$i=0;
foreach($collection as $product){
if($product->getFinalPrice() > $product->getPrice() && !$this->_itemCollection->getItemById($product->getId())){
$this->_itemCollection->addItem($product);
$i++;
}
if($i==$this->getProductsCount()){
break;
}
}
$this->setProductCollection($this->_itemCollection);