Сложная фильтрация по дополнительным полям в ИС

#
Сложная фильтрация по дополнительным полям в ИС
Есть два дополнительных поля: дата события (тип Дата, id = 23) и ежегодность события (тип Флажок, id = 25). Необходимо получать все элементы ИС:

  • у которых дата попадает в выбранный месяц выбранного года и событие не ежегодное;
  • у которых дата попадает только в выбранный месяц, но событие ежегодное.

Для этого реализованы 4 фильтра:

            $element = array();
            $element['type'] = 1;
            $element['prefix'] = 'and ( ( (';
            $element['property_id'] = 23;
            $element['if'] = '!=';
            $element['value'] = '';
            $element['sufix'] = 'and STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,\'%d.%m.%Y\') >= \''.$d_start.'\'';
            $element['sufix'] .= ' and STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,\'%d.%m.%Y\') <= \''.$d_end.'\')';
            $property['select'][] = $element;

            $element = array();
            $element['type'] = 1;
            $element['prefix'] = 'or (';
            $element['property_id'] = 25;
            $element['if'] = '!=';
            $element['value'] = '1';
            $element['sufix'] = ') )';
            $property['select'][] = $element;

            $element = array();
            $element['type'] = 1;
            $element['prefix'] = 'or ( (';
            $element['property_id'] = 23;
            $element['if'] = '!=';
            $element['value'] = '';
            $element['sufix'] = 'and DATE_FORMAT(STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,\'%d.%m.%Y\'), \'%m-%d\') >= \''.$d_start_s.'\'';
            $element['sufix'] .= ' and DATE_FORMAT(STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,\'%d.%m.%Y\'), \'%m-%d\') <= \''.$d_end_s.'\')';
            $property['select'][] = $element;

            $element = array();
            $element['type'] = 1;
            $element['prefix'] = 'or (';
            $element['property_id'] = 25;
            $element['if'] = '=';
            $element['value'] = '1';
            $element['sufix'] = ') ) )';
            $property['select'][] = $element;


Кусок запроса, отвечающий этим фильтрам, выглядит так:

   and (
      (
         (
            information_propertys_table.information_propertys_id='23'
            and information_propertys_items_table.information_propertys_items_value != ''
            and STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,'%d.%m.%Y') >= '2012-09-01'
            and STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,'%d.%m.%Y') <= '2012-09-30'
         ) or (
            information_propertys_table.information_propertys_id='25'
            and information_propertys_items_table.information_propertys_items_value != '1'
         )
      ) or (
         (
            information_propertys_table.information_propertys_id='23'
            and information_propertys_items_table.information_propertys_items_value != ''
            and DATE_FORMAT(STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,'%d.%m.%Y'), '%m-%d') >= '09-01'
            and DATE_FORMAT(STR_TO_DATE(information_propertys_items_table.information_propertys_items_value,'%d.%m.%Y'), '%m-%d') <= '09-30'
         ) or (
            information_propertys_table.information_propertys_id='25'
            and information_propertys_items_table.information_propertys_items_value = '1'
         )
      )
   )



В результате получаем все события сентября, независимо от установленного у них года и флажка ежегодности, а должны получить (по замыслу), например, все события сентября 2012 года и все ежегодные сентябрьские события.

HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= 2 используется. Фильтрация только по первым двум фильтрам или только по последним двум фильтрам возвращает ожидаемые правильные ответы.

Подскажите, пожалуйста, как можно реализовать задуманную фильтрацию?
Авторизация