使用以下代码:
$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();
答案 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);