Php magento从类别中获取产品,按兰德订购()
我有以下资料:Php magento从类别中获取产品,按兰德订购(),php,collections,magento,random,Php,Collections,Magento,Random,我有以下资料: $products = Mage::getModel('catalog/product') ->getCollection() ->addAttributeToSort('id', 'RAND()') ->addAttributeToSelect('small_image') ->addCategoryFilter(Mage::getModel('catalog/category')->load($catId));
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSort('id', 'RAND()')
->addAttributeToSelect('small_image')
->addCategoryFilter(Mage::getModel('catalog/category')->load($catId));
但是我需要按id
RAND()
订购,我该怎么做?(代码显示了我是如何在没有运气的情况下尝试的)Magento集合不接受除所选属性之一之外的其他参数。在这种情况下,您应该获取Zend\u Db\u Select
对象并向其添加订单指令
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSort()
->addAttributeToSelect('small_image')
->addCategoryFilter(Mage::getModel('catalog/category')->load());
$products->getSelect()->order(new Zend_Db_Expr('RAND()'));
要查看将执行的查询,可以使用此构造函数
$products->load(true, true); // first parameter show sql query in output, second show sql query in var/log/syslog
请参考以下问题:以及钟表匠的答案:
$collection->getSelect()->order(new Zend_Db_Expr('RAND()'));
使用orderbyrand()
以随机顺序返回项目列表将需要对整个表进行扫描和排序。它会对表中大量行的性能产生负面影响
关于如何优化此查询,有几种可选的解决方案。Magento为此提供了本机解决方案
Varien\u Db\u Select的orderand()
方法和数据库适配器允许为order BY
指定随机顺序并利用索引。
指定要在ORDER BY
子句中使用的某个整数索引列的名称,例如:
$collection->getSelect()->orderRand('main_table.entity_id');
请参见Varien\u Db\u Adapter\u Pdo\u Mysql::orderRand()
,了解实现细节。您的意思是不是希望按RAND()
排序,而不是按id=RAND()
排序?ASAIKRAND()
将返回一个介于0和1Nice之间的数字。但我想安德烈这次得到了。@clockworkgeek-当然,并不是想从安德烈身上拿走分数,只是在发帖前对搜索提出一个微妙的观点:)也许我本应该不那么微妙:)@JonathanDay我尝试了这个解决方案,但出现了以下错误。有什么想法吗?无法识别的方法“setCurPage()”;i:1;s:4108:“#0…\app\code\core\Mage\Catalog\Block\Product\List\Toolbar.php(225):Zend\u Db\u Select->u调用('setCurPage',Array')您有一些很好的知识这是一个关于大输出的简短回答。。。谢谢。。我有一个相同的需求,你的解决方案非常有效。这对我来说确实有效:$collection->getSelect()->orderand('e.entity_id')
但是,至少在我的例子中,与->order(新的Zend_Db_Expr('RAND()'))相比,这种方法并没有提高性能。