magento получить товары из категории, заказать по rand () - PullRequest
18 голосов
/ 05 декабря 2010

У меня есть следующее:

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

Но мне нужно заказать по id RAND(), как я могу это сделать?(Код показывает, как я пытался без удачи)

Ответы [ 3 ]

30 голосов
/ 05 декабря 2010

Коллекция 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
11 голосов
/ 05 декабря 2010

См. Этот вопрос: запрос magento limit + заказ по rand () и ответ clockworkgeek:

$collection->getSelect()->order(new Zend_Db_Expr('RAND()'));
1 голос
/ 06 марта 2014

Использование ORDER BY RAND() для возврата списка элементов в случайном порядке потребует полного сканирования таблицы и сортировки. Это может отрицательно повлиять на производительность большого количества строк в таблице.

Существует несколько альтернативных решений о том, как оптимизировать этот запрос. Magento предлагает для этого собственное решение.

Метод orderRand() Varien_Db_Select и адаптер базы данных позволяют указать случайный ордер и индекс кредитного плеча для ORDER BY. Укажите имя некоторого целочисленного индексированного столбца, который будет использоваться в предложении ORDER BY, например:

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

Подробнее о реализации см. Varien_Db_Adapter_Pdo_Mysql::orderRand().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...