Фильтрация по нескольким доп. свойствам ИС

#
Фильтрация по нескольким доп. свойствам ИС
Здравствуйте. Возникла необходимость создания фильтра элементов информационной системы по значениям нескольких дополнительных свойств одновременно. Ознакомление с подобными проблемами на форуме ни к чему не привело, ни в одной найденной мной ветке в конечном счете не описано решение. Мне удалось реализовать лишь фильтр, который выбирает элемент ИЛИ по значению одного свойства или по значению другого, необходимо же, чтобы в выборку попадали элементы, у которых оба значения определены. То, что работает:

$element['type'] = 1;
$element['property_id'] = 29;
$element['prefix'] = ' AND ('
$element['if'] = '=';
$element['value'] = '83';
$element['sufix'] = '';
$params['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 30;
$element['prefix'] = ' OR '
$element['if'] = '=';
$element['value'] = '86';
$element['sufix'] = ')';
$element['sql_group_by'] = 'GROUP BY information_items_table.information_items_id';
$element['sql_having'] = 'HAVING COUNT(information_propertys_items_table.information_propertys_items_id) = 2';
$params['select'][] = $element;


То есть данный фильтр выбирает из общего списка элементов те, у которых либо доп. свойство "29" == 83, либо доп. свойство "30" == 86, либо и то и то, надо сделать, чтобы выбирались только те, у которых и свойство "29" == 83, и свойство "30" == 86, если заменить во втором блоке $element префикс на " AND ", то в выборку не попадает ничего.

Помогите, пожалуйста, разобраться в этом вопросе. Заранее большое спасибо.
Модератор
#
Re: Фильтрация по нескольким доп. свойствам ИС
FFQuade,
Уже писал в другой теме, OR в данном случае нужен для выборки по 2-м и более св-вам и выборка идет именно по И, а не ИЛИ (пусть Вас OR не пугает). Готовые примеры есть в API и приводились на форуме, поиск по "HAVING COUNT" думаю поможет.
#
Re: Фильтрация по нескольким доп. свойствам ИС
$element['sql_group_by']
$element['sql_having']

Эти элементы никак не обработаются

можно перенести в sufix
$element['sufix'] = ') GROUP BY information_items_table.information_items_id HAVING COUNT(information_propertys_items_table.information_propertys_items_id) = 2';
#
Re: Фильтрация по нескольким доп. свойствам ИС
Спасибо большое, все заработало! Перенес в sufix 'GROUP BY... HAVING COUNT(...' второго блока $element, и теперь выборка производится как "И".
Модератор
#
Re: Фильтрация по нескольким доп. свойствам ИС
h4mpy,
Нет нет, с новыми версиями будет ошибка, если в суфикс их внести, они должны быть в $params:
Цитата:
param['sql_having'] - дополнения для SQL-запроса выборки в секции HAVING. При использовании параметра не забывайте о необходимости их фильтрации для защиты от SQL-инъекций.
$param['sql_group_by'] - дополнения для SQL-запроса выборки в секции GROUP BY. При использовании параметра не забывайте о необходимости их фильтрации для защиты от SQL-инъекций.
#
Re: Фильтрация по нескольким доп. свойствам ИС
Извините за глупый вопрос, но что понимается под "необходимостью фильтрации для защиты от SQL-инъекций" ?
Модератор
#
Re: Фильтрация по нескольким доп. свойствам ИС
FFQuade,
Имеется ввиду фильтрация внешних данных (в частности $_GET, $_POST, $_REQUEST, $_COOKIES и т.д.), посмотрите более подробно в руководстве по разработке модулей (в самом конце). Т.к. сейчас у Вас там просто статичная строка, то фильтровать ничего не требуется в данном случае.
#
Re: Фильтрация по нескольким доп. свойствам ИС
Все ясно, спасибо.
Модератор
#
Re: Фильтрация по нескольким доп. свойствам ИС
Пожалуйста.
#
Re: Фильтрация по нескольким доп. свойствам ИС
Возможна ли фильтрация в ИЭ по доп. параметру типа ИС? Есть ли другие варианты, чтобы заполнение доп. параметра производилось из списка допустимых значений, а на сайте фильтрация осуществлялась тоже из списка? Спасибо
Авторизация