magento 从类别中获取产品,按 rand() 排序

Posted

技术标签:

【中文标题】magento 从类别中获取产品,按 rand() 排序【英文标题】:magento get products from category, order by rand() 【发布时间】:2011-05-20 08:28:25 【问题描述】:

我有以下几点:

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSort('id', 'RAND()')
    ->addAttributeToSelect('small_image')
    ->addCategoryFilter(Mage::getModel('catalog/category')->load($catId));

但我需要通过 id RAND() 订购,我该怎么做? (代码显示了我是如何尝试没有运气的)

【问题讨论】:

您不是说要按RAND() 而不是id = RAND() 进行排序吗? ASAIK RAND() 将返回一个介于 0 和 1 之间的数字 【参考方案1】:

Magento 集合不接受除选定属性之一以外的参数。在这种情况下,您应该获取Zend_Db_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

【讨论】:

你知识渊博 这是大输出的简短答案...非常感谢..我有相同的要求,您的解决方案很有效..【参考方案2】:

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

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

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

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

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

【讨论】:

这确实对我有用:$collection->getSelect()->orderRand('e.entity_id'); 但是,至少在我的情况下,与->order(new Zend_Db_Expr('RAND()'))相比,这种方法并没有提高性能【参考方案3】:

参考这个问题:query magento limit + order by rand()和clockworkgeek的回答:

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

【讨论】:

不错。但我认为安德烈这次明白了。 @clockworkgeek - 绝对不是想从 Andrey 那里拿走分数,只是在发布之前对搜索提出一个微妙的观点 :) 也许我应该不那么微妙 :) @JonathanDay 我尝试了这个解决方案,但出现以下错误。任何想法?无法识别的方法 'setCurPage()'";i:1;s:4108:"#0 ...\app\code\core\Mage\Catalog\Block\Product\List\Toolbar.php(225): Zend_Db_Select-> __call('setCurPage', 数组)

以上是关于magento 从类别中获取产品,按 rand() 排序的主要内容,如果未能解决你的问题,请参考以下文章

Magento - 按属性分类产品

Magento 类别按属性排序

如何从magento 2中的可配置产品中获取简单产品

markdown Magento - 获取当前产品及其类别

markdown Magento - 获取当前产品及其类别

如何从 Magento 搜索中过滤掉某些类别的产品?