Маска
Описание
Значения фильтра этого типа обрабатываются по следующим правилам:
Операция | Значение | Описание |
---|---|---|
пустая строка | Фильтр по полю применяться не будет. Будут выбраны все значения. | |
"?" | не пустая строка | Значением фильтра должна быть строка которая может содержать сложную логику. |
"%", "!%" | не пустая строка | Будет выполнен регистронезависимый поиск подстроки. |
"><" или "!><" | должно быть массивом с двумя элементами | Будет выполнена проверка на попадание в диапазон заданный элементами массива значения фильтра. Включительно. Если перед полем этого указано отрицание (символ "!"), то будут выбраны значения не попадающие в диапазон. |
false | Если перед полем этого фильтра указано отрицание (символ "!"), то будут выбраны все не пустые значения.
Иначе будут выбраны пустые значения - NULL или те у которых длина равна нулю. | |
"=" | будет приведено к верхнему регистру | Проверка на точное совпадение значения. Если указано отрицание, то проверка будет выполнена на неравенство. Проверка регистронезависимая. |
">", "<", ">=", "<=" | будет приведено к верхнему регистру | "Больше", "меньше", "больше или равно" и "меньше или равно". Можно использовать "!" для отрицания условия. Не зависит от регистра. |
не указана | будет приведено к верхнему регистру | Значение фильтра будет служить маской для отбора значений. "%" - любое количество любых символов, "_" - один любой символ. |
Примечание: если значение фильтра массив, то для каждого элемента будут формироваться соответствующие условия, а затем они будут объединены по "ИЛИ". В случае отрицания условия будут объединяться по "И".
Смотрите также
Примеры использования
<? $arFilter = ( ... "NAME" => false, //Не вернет ничего т.к. нет пустых NAME "NAME" => "", //вернет все т.к. фильтр не будет применен "NAME" => "А%", //вернет все NAME начинающиеся на "A" "?NAME" => "(мама || мачеха) && (папа || отчим)", //Все имеют двух родителей ">NAME" => "э", //Все начинающиеся на Э, Ю, Я. ... ); ?>
// исключение из выборки всех записей, в названиях которых есть вхождения jpg, jpeg и png $arFilter = array( "IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "!NAME" => array("%.jpg%", "%.jpeg%", "%.png%") );
//Есть очень большой каталог, несколько тысяч //нужно сделать выбор по двум словам (например, "Citroen" и "Berlingo"), которые могут содержаться в одном из пользовательских свойств элементов. //Как сделать через маску? //1-ый вариант маски: $arFilter['PROPERTY_a_use'] = "%Citroen%Berlingo%"; //2-ой вариант маски: $arFilter['?PROPERTY_a_use'] = "Citroen && Berlingo"; //Запрос $getListFirst = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect); //По производительности 2-ой вариант хуже, так как 1-ый вариант - это обычный LIKE запрос к БД, в то время как 2-ой вариант делает переработку фильтра запроса //С другой стороны, если в 1-ом варианте поменять местами слова, то ничего не найдется, а во 2-ом - должно сработать.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024