Фильтр по доп.свойства модификаций

#
Фильтр по доп.свойства модификаций
Доброго дня. Возможно кто делал уже грамотно на актуальной версии системы. Есть необходимость в обработчик фильтра где:
if (Core_Array::getGet('filter') || Core_Array::getGet('sorting'))

Написать так что бы фильтр применился и доп.свойства модификаций. Поддержка подсказывает что надо как вариант отдельно фильтровать модификации и потом подменять их основным товаром.
Как я вижу реализацию этой задачи: Применить фильтр отдельным запросом по доп.свойствам модификаций далее из полученного результата собрать ID основных товаров и как то их передать так чтоб было нечто такое:
SELECT * FROM `shop_items` WHERE `id`  IN ({ID основных товаров})

Или есть более оптимальный вариант решений возможно прямо с вложенными под запросами?
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Фильтр по доп.свойства модификаций
Пример обработки доп свойства типа строка будет так выглядеть:


// Для строк фильтр LIKE %...%
               if ($oProperty->type == 1)
               {
                  
               
                  
                  foreach ($aPropertyValues as $propertyValue)
                  {
                     $oCore_QueryBuilder_Select_For_Modifications = Core_QueryBuilder::select('shop_items.modification_id')
                        ->from('shop_items')
                        ->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
                        ->leftJoin('property_value_strings', 'shop_items.id', '=', 'property_value_strings.entity_id',
                           array(
                                   array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_strings`.`property_id`')))
                           )
                        )
                        ->where('shop_items.shop_id', '=', $oShop->id)
                        ->where('shop_items.deleted', '=', 0)
                        ->where('shop_items.active', '=', 1)                     
                        ->where('shop_items.modification_id', '>', 0)
                        ->where('shop_item_properties.property_id', '=', $oProperty->id)
                        ->where($tableName . '.value', 'LIKE', "%{$propertyValue}%")
                        ->groupBy('shop_items.id');
                     
                     
                     
                     $Shop_Controller_Show->shopItems()->queryBuilder()
                        ->open()
                        ->where($tableName . '.value', 'LIKE', "%{$propertyValue}%")
                        ->setOr()
                        ->where('shop_items.id', 'IN', $oCore_QueryBuilder_Select_For_Modifications)
                        ->close();
                  }
               }
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Фильтр по доп.свойства модификаций
Спасибо за код. В моем случае свойства были типом список по этому написал так:
// Для строк фильтр LIKE %...%
                    if ($oProperty->type == 1)
                    {
                        foreach ($aPropertyValues as $propertyValue)
                        {
                            $Shop_Controller_Show->shopItems()->queryBuilder()
                                ->where($tableName . '.value', 'LIKE', "%{$propertyValue}%");
                        }
                    }
                    elseif ($oProperty->type == 3)
                    {
                        foreach ($aPropertyValues as $propertyValue)
                        {
                            $oCore_QueryBuilder_Select_For_Modifications = Core_QueryBuilder::select('shop_items.modification_id')
                                ->from('shop_items')
                                ->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
                                ->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
                                    array(
                                        array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
                                    )
                                )
                                ->where('shop_items.shop_id', '=', $oShop->id)
                                ->where('shop_items.deleted', '=', 0)
                                ->where('shop_items.active', '=', 1)
                                ->where('shop_items.modification_id', '>', 0)
                                ->where('shop_item_properties.property_id', '=', $oProperty->id)
                                ->where($tableName . '.value', '=', $propertyValue)
                                ->groupBy('shop_items.id');

                            $Shop_Controller_Show->shopItems()->queryBuilder()
                                ->open()
                                ->where($tableName . '.value', '=', $propertyValue)
                                ->setOr()
                                ->where('shop_items.id', 'IN', $oCore_QueryBuilder_Select_For_Modifications)
                                ->close();
                        }

                    }

Работает.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация