Intereting Posts

Я не могу сортировать коллекцию продуктов по категориям id

У меня есть несколько категорий: парни, дамы, мужчины, женщины и предложения.

Каждый продукт присваивается мужчинам, женщинам, мужчинам или женщинам.

И некоторые продукты относятся к категории «предложения».

Мне нужно получить все «предложения», но сортировать по другим категориям, я имею в виду:

ПРЕДЛОЖЕНИЯ -> ребята продукты -> женская продукция -> мужская продукция -> женская продукция

$collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSort('category_ids', 'ASC') ->addAttributeToSelect(array('name', 'sku', 'status', 'visibility', 'is_saleable')); foreach ($_productCollection as $_product) { echo "<!-- " . $_product->getName() . '-->'; } 

Прямо сейчас я получаю продукты для отображения по категории «предложения», но эти продукты приводятся по атрибуту name, и мне нужны эти продукты, отсортированные по категориям перед именем.

Как я могу это достичь?

    Следующий запрос будет возвращать все продукты и присоединяться к ним из таблицы отношений продуктов категории. Он также сортирует записи по category_id и позиции в пределах категории.

     SELECT `e`.* FROM `catalog_product_entity` AS `e` LEFT JOIN catalog_category_product ON(entity_id=product_id) ORDER BY category_id AND position; 

    Единственное, что может случиться, это то, что вы сталкиваетесь с дублирующимися продуктами, поскольку продукты могут быть в категории товаров для женщин и женщин. Хотя это можно просто предотвратить, удалив x.catetgory_id из запроса и добавив DISTINCT для фильтрации дубликатов.

    Под ним всего лишь быстрый макет того, как должна выглядеть коллекция. Вам все равно нужно проверить это. Надеюсь, это руководство в хорошем направлении для вас.

     $collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('*') ->joinTable('catalog/category_product', 'entity_id=product_id', array('product_id' => 'product_id'), null, 'left') ->addAtributeToSort('category_id');