【问题标题】:Magento distinct(true) clause ignoredMagento distinct(true) 子句被忽略
【发布时间】:2014-04-10 10:27:55
【问题描述】:

使用以下代码:

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

我发现 distinct 在 1.4.2 中被忽略,在 1.8.1 中的代码与我预期的完全相同(为每个品牌返回一个条目)。

1.4.2 结果:

"Ace"
"Ace"

1.8.1 结果:

"Ace"

就我自己而言,我注意到 1.4.2 正在从模型中为每个 object 返回一个包含所有字段的数组,而不仅仅是像 1.8.1 那样在 select (brand) 中指定的那个。我认为这就是导致两个版本的 SELECT 中都包含 distinct 的问题的原因——事实上,不同版本的 SELECT 语句是相同的。

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

编辑

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

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

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

【问题讨论】:

    标签: magento magento-1.4


    【解决方案1】:

    你可以添加这个函数来获取集合的选择语句。我相信你会得到结果。

       $collection = Mage::getModel('custom/custom')
            ->getCollection()    
            ->addFieldToSelect('brand')
            ->load();
    
       $collection->getSelect()->columns(
        array('asbrand' => new Zend_Db_Expr(
            "distinct(brand)")
            )
        );
    

    希望这对你有用。

    【讨论】:

    • 感谢您的建议,不幸的是它不起作用。我仍然看到相同的结果,例如同一品牌多次出现在结果中。
    • 请像echo $collection->getSelect() 一样打印此集合,以便打印查询。或删除 addfiled 以选择可能对你有用
    • SELECT main_table.*, distinct(brand) AS asbrand FROM custom_custom AS main_table string(3),这和我之前得到的没什么不同。删除 addFieldToSelect 对结果也没有影响,我仍然看到同一品牌的多个条目
    • 尝试按名称分组,这样只会有一条记录。
    【解决方案2】:

    你也可以这样写

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

    稍微缩短代码。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-18
        相关资源
        最近更新 更多