Magento按相对值过滤

时间:2011-10-03 08:10:05

标签: magento

我想根据该行的相对值过滤集合。例如,

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)

谢谢。

2 个答案:

答案 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);