Фильтр товаров по условию ИЛИ

#
Фильтр товаров по условию ИЛИ
У товара есть 4 доп. свойства, куда вставляются картинки. Требуется вывести список товаров, у которых вставлена хотя бы одна картинка в любое свойство (или 2 картинки, или 3, или 4).
Для этого в ТДС пишу (пока использую только 2 св-ва с кодами 272 и 274):

      $my_index_param=0;
      $my_photo_condition = 0;
...
     /* Ограничиваем по фото */
      $external_propertys['is_photo'] = isset($_GET['is_photo']);
      if (to_int($_GET['is_photo']) > 0)
      {
         $element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
         if ($my_index_param>0)
         {
            $element['prefix'] = 'OR('; // префикс
         }
         else
         {
            $element['prefix'] = 'AND('; // префикс
         }

         $element['property_id'] = '272';

         $element['if'] = '!='; // Условие
        
         $element['value'] = '""';
        
         $element['sufix'] = "OR shop_list_of_properties_table.shop_list_of_properties_id='274' AND shop_properties_items_table.shop_properties_items_value != '')";
         $param['select'][] = $element;

         $my_photo_condition = 2;
         $my_index_param = $my_index_param + 1;

         /* Применять фильтр */
         $external_propertys['apply_filter'] = true;
      }

...

         if ($count_condition > 0)
         {
            $count_condition_=$count_condition + $my_photo_condition;
            $param['sql_group_by'] = 'GROUP BY shop_items_catalog_table.shop_items_catalog_item_id';
            $param['sql_having'] = "HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = {$count_condition_}";
         }
         else
         {
            $param['sql_having'] = 'HAVING 1 ';
         }



Если не выбрано других доп. свойств, то всё выбирается, как надо. Запрос выглядит так:

Array ( [user_id] => 0 [current_group_id] => [select] => Array ( [0] => Array ( [type] => 1 [prefix] => AND( [property_id] => 272 [if] => != [value] => "" [sufix] => OR shop_list_of_properties_table.shop_list_of_properties_id='274' AND shop_properties_items_table.shop_properties_items_value != '') ) [1] => Array ( [type] => 0 [prefix] => OR ( [property_id] => 272 [if] => [value] => [sufix] => [name] => ) [2] => Array ( [type] => 0 [prefix] => 1 [property_id] => 272 [if] => [value] => [sufix] => ) [name] => ) [3] => Array ( [type] => 0 [prefix] => AND [property_id] => 272 [if] => = [value] => 19 [sufix] => [name] => shop_items_catalog_table.shop_shops_id ) ) [items_begin] => 0 [sql_having] => HAVING 1 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )


Но если выбирается ещё какое-нибудь доп. св-во, то выбираются только записи (с учётом того доп. св-ва), у которых заполнено И 272 И 274 св-ва. Запрос выглядит так:

Array ( [user_id] => 0 [current_group_id] => [select] => Array ( [0] => Array ( [type] => 1 [prefix] => AND( [property_id] => 272 [if] => != [value] => "" [sufix] => OR shop_list_of_properties_table.shop_list_of_properties_id='274' AND shop_properties_items_table.shop_properties_items_value != '') ) [1] => Array ( [type] => 0 [prefix] => OR ( [property_id] => 272 [if] => [value] => [sufix] => [name] => ) [2] => Array ( [type] => 1 [prefix] => [property_id] => 265 [if] => = [value] => 360 [sufix] => [name] => ) [3] => Array ( [type] => 0 [prefix] => [property_id] => 265 [if] => [value] => [sufix] => ) [name] => ) [4] => Array ( [type] => 0 [prefix] => AND [property_id] => 265 [if] => = [value] => 19 [sufix] => [name] => shop_items_catalog_table.shop_shops_id ) ) [items_begin] => 0 [sql_group_by] => GROUP BY shop_items_catalog_table.shop_items_catalog_item_id [sql_having] => HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = 3 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )


Как сделать так, чтобы при выборе других доп. свойств выводились товары, у которых заполнено хотя бы одно из свойств: ИЛИ 272, ИЛИ 274?
Модератор
#
Re: Фильтр товаров по условию ИЛИ
Уберите ограничение по HAVING COUNT
#
Re: Фильтр товаров по условию ИЛИ
Цитата:
Уберите ограничение по HAVING COUNT

Убрал. Теперь запрос выглядит так:

Array ( [user_id] => 0 [current_group_id] => [select] => Array ( [0] => Array ( [type] => 1 [prefix] => AND( [property_id] => 272 [if] => != [value] => "" [sufix] => OR shop_list_of_properties_table.shop_list_of_properties_id='274' AND shop_properties_items_table.shop_properties_items_value != '') ) [1] => Array ( [type] => 0 [prefix] => OR ( [property_id] => 272 [if] => [value] => [sufix] => [name] => ) [2] => Array ( [type] => 1 [prefix] => [property_id] => 265 [if] => = [value] => 360 [sufix] => [name] => ) [3] => Array ( [type] => 0 [prefix] => [property_id] => 265 [if] => [value] => [sufix] => ) [name] => ) [4] => Array ( [type] => 0 [prefix] => AND [property_id] => 265 [if] => = [value] => 19 [sufix] => [name] => shop_items_catalog_table.shop_shops_id ) ) [items_begin] => 0 [sql_group_by] => GROUP BY shop_items_catalog_table.shop_items_catalog_item_id [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )


Да, теперь всё идёт по ИЛИ. Но у меня выбрано доп св-во, например, 265 и в результат попадают записи, удовлетворяющие ИЛИ св-ву 265 ИЛИ св-ву 272 ИЛИ св-ву 274. А нужно, чтобы удовлетворяли: И св-ву 265 И (св-ву 272 ИЛИ св-ву 274)
Модератор
#
Re: Фильтр товаров по условию ИЛИ
Такой вариант невозможен.
#
Re: Фильтр товаров по условию ИЛИ
Жалко! Хотелось бы иметь такую возможность.
Авторизация