Структура инфоблоков на картинках выше.
Код |
---|
<? $my_colors_medium_filter = array("LOGIC" => $_POST['logic']); // Постом передаем OR или AND foreach($sel_colors_arr as $k=>$v) { $my_colors_medium_filter[] = array('PROPERTY_COLORS'=>$v); // Добавляем каждый цвет в массив } $arSelect = Array("ID", "NAME", "PROPERTY_IMAGE", "PROPERTY_POSTID", "PROPERTY_TAGS", "PROPERTY_COLORS"); // что выбрать $arFilter = Array("IBLOCK_ID"=>5,">PROPERTY_POSTID" => "0"); // Стартовые параметры $arFilter[] = $my_colors_medium_filter; // Добавляем цвета echo "<pre>"; var_dump($arFilter); // Выводим массив фильтра echo "</pre>"; $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect); // Выбираем 50 записей по фильтру $fc = 0; while($ob = $res->GetNextElement()) { echo 'нашел'; // Нашлось или нет.. } |
дамп выводит:
Код |
---|
array(3) { ["IBLOCK_ID"]=> int(5) [">PROPERTY_POSTID"]=> string(1) "0" [0]=> array(3) { ["LOGIC"]=> string(3) "AND" [0]=> array(1) { ["PROPERTY_COLORS"]=> string(2) "96" } [1]=> array(1) { ["PROPERTY_COLORS"]=> string(3) "103" } } } |
Если мы выбираем например красный и желтый цвета и логику передаем OR , то в результате находятся записи где есть или красный или желтый или красный и желтый. (это работает как надо)
Если мы выбираем цвета красный и желтый и логику передаем AND , то в результате не найдет ничего. Смотря через MySQL в таблице свойств инфоблока есть записи у которых в свойствах стоит и красный и желтый, также если отдельно искать по красному и потом по желтому, то будут одинаковые результаты, то есть записи с двумя такими цветами есть, а вот почему они не находятся через данный запрос непонятно.
Буду очень признателен если поможете разобраться с данной проблемой.