通过rand()查询magento limit + order

时间:2010-11-10 11:44:33

标签: magento

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();也不起作用。

TXS。

4 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:3)

尝试使用

$收藏 - > setPageSize(5) - > setCurPage(1);

答案 2 :(得分:3)

正如clockworkgeek所说,使用$collection->getSelect()->order(...)方法随机化订单。要将其限制为$n个项目,您也可以使用

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

答案 3 :(得分:0)

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

如何优化此查询有几种替代解决方案。 Magento为此提供了原生解决方案。

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

ORDER BY

有关实施细节,请参阅$collection->getSelect()->orderRand('main_table.entity_id');