Magento distinct(true)子句被忽略了

时间:2014-04-10 10:27:55

标签: magento magento-1.4

使用以下代码:

$collection = Mage::getModel('custom/custom')
    ->getCollection()
    ->distinct(true)
    ->addFieldToSelect('brand')
    ->load();

我发现在1.4.2中忽略了distinct,1.8.1中完全相同的代码正如我所期望的那样工作(为每个品牌返回一个条目)。

1.4.2结果:

"Ace"
"Ace"

1.8.1结果:

"Ace"

对于我自己,我注意到1.4.2从模型中为每个对象返回所有字段的数组,而不是像1.8.1那样只返回select(品牌)中指定的数组。我认为这是导致问题的原因,两个版本的SELECT中都包含了distinct - 事实上,SELECT语句在不同版本中是相同的。

有没有办法在旧版本的Magento中获得单个字段的独特结果?

修改

基于下面与liyakat的讨论,我的最终解决方案是:

$collection = Mage::getModel('custom/custom')
    ->getCollection()
    ->distinct(true)
    ->addFieldToSelect('brand')
    ->setOrder('brand', 'ASC');

$collection->getSelect()->group('brand');
$collection->load();

3 个答案:

答案 0 :(得分:2)

您可以添加此功能以获取选择的集合声明。我相信你会得到结果。

   $collection = Mage::getModel('custom/custom')
        ->getCollection()    
        ->addFieldToSelect('brand')
        ->load();

   $collection->getSelect()->columns(
    array('asbrand' => new Zend_Db_Expr(
        "distinct(brand)")
        )
    );

希望这对你有用。

答案 1 :(得分:2)

您也可以像这样写

... $collection->getSelect()->group('product_id')->distinct(true);

稍微缩短代码。

答案 2 :(得分:0)

在添加联接时,请确保在第三个参数中传递空白数组(仅在添加联接时)。

$collection->getSelect()->joinLeft(
    'sales_order_item',
    'sales_order_item.order_id = main_table.order_id',
    []
);

然后添加以下内容以应用 DISTINCT

$collection->getSelect()->distinct(true);