Фильтр по 2 доп. св-вам

#
Фильтр по 2 доп. св-вам
Как сделать фильтрацию сразу по 2 доп. полям?

Все перепробовали, в итоге просто перед вызовом showshop поставили фильтр


$element['type'] = 1;
$element['prefix'] = 'AND';
$element['property_id'] = 152;         
$element['if'] = '=';
$element['value'] ='1';
$element['sufix'] = '';
$param['select'][] = $element;

$element['type'] = 1;
$element['prefix'] = 'AND';
$element['property_id'] = 164;         
$element['if'] = '=';
$element['value'] ='1';
$element['sufix'] = '';
$param['select'][] = $element;


ничего не возвращает
элементы с такими параметрами точно есть, по отдельности фильтры тоже работают, а вместе не хотят, как правильно сделать такую конструкцию?
#
Re: Фильтр по 2 доп. св-вам
h4mpy, пример кода:
<?
$shop = & singleton('shop');
$param = array();
$external_propertys = array();

$param['current_group_id'] = false;
$param['items_on_page'] = 3;
$param['items_order'] = 'rand';

// Ограничение по цвету
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] = 159;
$element['prefix'] = ' AND ('; // префикс
$element['if'] = '='; // Условие
$element['value'] = '1';  //
$element['sufix'] = '';
$param['select'][] = $element;


// Ограничение по флажку
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] = 183;
$element['prefix'] = ' OR '; // префикс
$element['if'] = '='; // Условие
$element['value'] = '1';  //
$element['sufix'] = ') GROUP BY shop_items_catalog_table.shop_items_catalog_item_id
HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= 2'; /*соответствует количеству доп. свойств, по которым выбираем*/
$param['select'][] = $element;

$shop->ShowShop(1,'МагазинКаталогТоваровНаГлавной', $param, $external_propertys);
}
?>
#
Re: Фильтр по 2 доп. св-вам
вот такое выдает
Ошибка выполнения запроса! - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' GROUP BY shop_items_catalog_table.shop_items_catalog_item_id HAVING COUNT(sho' at line 20
#
Re: Фильтр по 2 доп. св-вам
h4mpy, приведите полный текст запроса из логов.
#
Re: Фильтр по 2 доп. св-вам
все хорошо, спасибо, пропустил скобку

а как к ним еще добавить еще одну проверку, чтобы одно св-во-число принадлежало определенному диапазону

в таком вызове где то есть ошибка


$element['type'] = 1;
$element['property_id'] = 152;
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = '1';
$element['sufix'] = '';
$param['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 164;
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = '1';
$element['sufix'] = '';
$param['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 167;
$element['prefix'] = ' OR ';
$element['if'] = '>';
$element['value'] = '10';
$element['sufix'] = '';
$param['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 167;
$element['prefix'] = ' OR ';
$element['if'] = '<';
$element['value'] = '100';
$element['sufix'] = ') GROUP BY shop_items_catalog_table.shop_items_catalog_item_id
HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= 3';
$param['select'][] = $element;
#
Re: Фильтр по 2 доп. св-вам
h4mpy, попробуйте вместо
HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= 3';
использовать
HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= 4';

У вас 4 условия.
#
Re: Фильтр по 2 доп. св-вам
не получается найти причину( 4 тоже не работает

сократили фильтр до

$element['type'] = 1;
$element['property_id'] = 167;
$element['prefix'] = ' AND (';
$element['if'] = '>';
$element['value'] = '20';
$element['sufix'] = '';
$param['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 167;
$element['prefix'] = ' OR ';
$element['if'] = '<';
$element['value'] = '100';
$element['sufix'] = ') GROUP BY shop_items_catalog_table.shop_items_catalog_item_id
HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= 2';
$param['select'][] = $element;


тоже ничего не возвращает..элементы есть..фильтры по отдельности рабочие
#
Re: Фильтр по 2 доп. св-вам
h4mpy, сообщите адрес панели phpMyAdmin и доступ к ней на адрес службы тех. поддержки.
Модератор
#
Re: Фильтр по 2 доп. св-вам
h4mpy, чтобы работал фильтр по всем 3-м доп. свойствам необходимо задать следующий код

$element['type'] = 1;
$element['property_id'] = 152;
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = '1';
$element['sufix'] = '';
$param['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 164;
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = '1';
$element['sufix'] = '';
$param['select'][] = $element;

/* Т.к. доп. свойство с идентификатором 167 должно содержать числовые значения и соответственно при фильтрации должно идти сравнение чисел (по умолчанию идет сравнение значений как строк), то обычный конструктор запроса не подойдет. Необходимо задавать условие по данному доп. свойству так как указано ниже. Значения диапозона значений выделены жирным шрифтом*/
$element['type'] = 0;
$element['name'] = 'shop_items_catalog_table.shop_shops_id';
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = '7';
$element['sufix'] = "
AND (shop_list_of_properties_table.shop_list_of_properties_id=167
AND CONVERT(shop_properties_items_table.shop_properties_items_value, UNSIGNED) >= '60'    
AND  shop_list_of_properties_table.shop_list_of_properties_id=167
AND CONVERT(shop_properties_items_table.shop_properties_items_value, UNSIGNED) <= '70'
)) GROUP BY shop_items_catalog_table.shop_items_catalog_item_id
HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= 3";
$param['select'][] = $element;
Авторизация