【问题标题】:query magento limit + order by rand()通过 rand() 查询 magento 限制 + 订单
【发布时间】:2011-05-07 20:16:24
【问题描述】:
function getIdModelsSliderJuwels(){
 $collection = Mage::getModel("catalog/product")->getCollection();
 $collection->addAttributeToFilter("attribute_set_id", 27); 
     $collection->addAttributeToSelect('modellijnen'); 
   //  $collection->setRandomOrder();
   //  $collection->getSelect()->limit( 5 ); 
 return $collection; 
}

你好,

我想知道如何为您在 Magento 中运行的查询设置限制,因为 $collection->getSelect()->limit( 5 ); 不起作用。

还有怎么随机选择,$collection->setRandomOrder();也行不通。

发送。

【问题讨论】:

  • “不工作”到底是什么意思?你得到什么错误?
  • 尝试查看生成的 SQL 查询:echo $collection->getSelect();
  • 有限制,我没有收到任何错误,但我找回了所有 modellijnen 而不是 5
  • $collection->setRandomOrder();这个函数他不知道
  • 只是给像我这样最终在这里寻找如何设置收货订单的人的说明。我用这个:->addOrder('banner_order', 'DESC');

标签: magento


【解决方案1】:

setRandomOrder 不适用于产品集合,仅适用于相关产品。您必须使用以下代码自行添加:

$collection->getSelect()->order(new Zend_Db_Expr('RAND()'));

同时设置页面大小和页数的快捷方式是:

$collection->setPage($pageNum, $pageSize);

【讨论】:

    【解决方案2】:

    正如clockworkgeek 所说,使用$collection->getSelect()->order(...) 方法来随机化顺序。将其限制为仅$n 您还可以使用的项目数

    $collection->getSelect()->limit($n);
    

    【讨论】:

    • 虽然这会触发 phpcs (MagentoECGM1) 警告(在资源模型外检测到数据访问方法 LIMIT),但它似乎是使用 rand() + limit 的唯一方法。
    【解决方案3】:

    尝试使用

    $collection->setPageSize(5)->setCurPage(1);

    【讨论】:

      【解决方案4】:

      使用ORDER BY RAND() 以随机顺序返回项目列表将需要全表扫描和排序。它会对表中大量行的性能产生负面影响。

      对于如何优化此查询,有几种可能的替代解决方案。 Magento 为此提供了本机解决方案。

      Varien_Db_SelectorderRand() 方法和数据库适配器允许为ORDER BY 指定随机顺序和杠杆指数。指定要在ORDER BY 子句中使用的某个整数索引列的名称,例如:

      $collection->getSelect()->orderRand('main_table.entity_id');
      

      有关实施细节,请参阅Varien_Db_Adapter_Pdo_Mysql::orderRand()

      【讨论】:

        猜你喜欢
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多