MS2 Требуется вывести все мультикатегории - РЕШЕНО
        Друзья, кто поможет?
MS2
Имеется «Товар 1»
Назначил ему vendor с ID 22
Назначил ему parent с ID 33
Назначил ему мультикатегорию с ID 44
Задача:
На странице производителя vendor с ID 22 вывести список мультикатегорий, в которых есть товары с vendor 22.
В итоге с помощью Руслана и Василия разобрался.
Для тех, кому понадобится такая нестандартная выборка:
    
    
                                                                                
            MS2
Имеется «Товар 1»
Назначил ему vendor с ID 22
Назначил ему parent с ID 33
Назначил ему мультикатегорию с ID 44
Задача:
На странице производителя vendor с ID 22 вывести список мультикатегорий, в которых есть товары с vendor 22.
В итоге с помощью Руслана и Василия разобрался.
Для тех, кому понадобится такая нестандартная выборка:
[[pdoResources?
    &tplWrapper=`@INLINE <span>Коллекции: </span> [[+output]]`
    &tpl=`TPL.collection.item.for.products.page`
    &class=`msProduct`
    &parents=`0`
    &outputSeparator=`, `
    &where=`{
        "Data.vendor":"[[+id]]",
        "msCategory.template":"9"
    }`
    &leftJoin=`{
        "Data": {
            "class": "msProductData",
            "on": "msProduct.id = Data.id"
        },
        "msCategoryMember": {
            "class": "msCategoryMember",
            "on": "msCategoryMember.product_id = msProduct.id"
        },
        "msCategory": {
            "class": "msCategory",
            "on": "msCategory.id = msCategoryMember.category_id"
        }
    }`
    &select=`{
        "msCategory":"longtitle,id,pagetitle,template,menutitle"
    }`
    &groupby=`msCategory.id`
    &showLog=`0`
    &sortby=`msCategory.menutitle`
    &sortdir=`ASC`
]]    Комментарии: 11
                А что такое мультикатегория? Это категория с подкатегориями?            
                    
                Вот, сделал скрин.
yadi.sk/i/GmP36rMQfsyTT
                    yadi.sk/i/GmP36rMQfsyTT
                Нужно выбрать товары с vendor = 22 и приджоинить к ним msCategory через msCategoryMember.
Один запрос c двумя join, можно сделать через pdoResources.
                    Один запрос c двумя join, можно сделать через pdoResources.
                Вот так?
                    [[!pdoResources?
    &tpl=`@INLINE коллекция [[+pagetitle]]` 
    &parents=`22`
    &innerJoin=`{
        "msCategoryMember": {
            "class": "msCategoryMember",
            "on": "msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1"
        }
    }`
    &showLog=`1`
]]Только что-то совсем не то выводится…            Нужно выбрать товары с vendor = 22а у тебя
&parents=`22`По идее нужно:
&parents=`0`
&where={Data.vendor :22}
                Ой, да, туплю. Вот так:
                    [[!pdoResources?
        &tpl=`@INLINE коллекция [[+pagetitle]]` 
        &parents=`0`
        &where=`{Data.vendor :22}`
        &innerJoin=`{
            "msCategoryMember": {
                "class": "msCategoryMember",
                "on": "msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1"
            }
        }`
        &showLog=`1`
    ]]Но, всё равно:0.0005679: Could not process query, error #1054: Unknown column 'msProduct.id' in 'on clause'Полный лог:0.0001349: pdoTools loaded
0.0000329: xPDO query object created
0.0003889: innerJoined msCategoryMember as msCategoryMember
0.0005510: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
0.0000510: Processed additional conditions
0.0006220: Added where condition: 0=, modResource.published=1, modResource.deleted=0
0.0001190: Sorted by modResource.publishedon, DESC
0.0003531: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties` FROM `site_content` AS `modResource` JOIN `ms2_product_categories` `msCategoryMember` ON msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1 WHERE  ( `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY modResource.publishedon DESC "
0.0005679: Could not process query, error #1054: Unknown column 'msProduct.id' in 'on clause'
0.0029020: Total time
15 728 640: Memory usage            
                я с джоинами не дружу, если можно потыкаю пальцем в небо. У тебя pdoResources, а с товарами работает msProduct или как он там.            
                    
                Как-то так:
                    [[!pdoResources?
    &tpl=`@INLINE коллекция [[+pagetitle]]`
    &class=`msProduct`
    &parents=`0`
    &where=`{"Data.vendor":22}`
    &leftJoin=`{
        "Data": {
            "class": "msProductData",
            "on": "msProduct.id = Data.id"
        },
        "msCategoryMember": {
            "class": "msCategoryMember",
            "on": "msCategoryMember.product_id = msProduct.id"
        },
        "msCategory": {
            "class": "msCategory",
            "on": "msCategory.id = msCategoryMember.category_id"
        }
    }`
    &select=`{
        "msCategory":"pagetitle"
    }`
    &groupby=`msCategory.id`
    &showLog=`1`
]]            
                Спасибо, Руслан, большущее!
Разобрался. Для тех, кому еще понадобится такая выборка, немного доработанная мной:
                    Разобрался. Для тех, кому еще понадобится такая выборка, немного доработанная мной:
[[pdoResources?
    &tplWrapper=`@INLINE <span>Коллекции: </span> [[+output]]`
    &tpl=`TPL.collection.item.for.products.page`
    &class=`msProduct`
    &parents=`0`
    &outputSeparator=`, `
    &where=`{
        "Data.vendor":"[[+id]]",
        "msCategory.template":"9"
    }`
    &leftJoin=`{
        "Data": {
            "class": "msProductData",
            "on": "msProduct.id = Data.id"
        },
        "msCategoryMember": {
            "class": "msCategoryMember",
            "on": "msCategoryMember.product_id = msProduct.id"
        },
        "msCategory": {
            "class": "msCategory",
            "on": "msCategory.id = msCategoryMember.category_id"
        }
    }`
    &select=`{
        "msCategory":"longtitle,id,pagetitle,template,menutitle"
    }`
    &groupby=`msCategory.id`
    &showLog=`0`
    &sortby=`menutitle`
    &sortdir=`ASC`
]]Только вот беда, что по menutitle не сортирует почему-то… Все вперемешку. Непонятно из-за чего.            
                Можно попробовать указать явно таблицу:
Ну и вообще, стоит убедиться, что menutitle везде заполнен, потому что mySql не подставит pagetitle вместо пустого menutitle как сниппет pdoMenu.
                    &sortby=`msCategory.menutitle`Ну и вообще, стоит убедиться, что menutitle везде заполнен, потому что mySql не подставит pagetitle вместо пустого menutitle как сниппет pdoMenu.
                О! Сработало! Спасибо.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.