Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Фильтр по множественному числовому полю

00 голосов
5
Здравствуйте.
В процессе работы над проектом возникла следующая задача.

Есть ИБ "job", а в нем множественное свойство "salary" типа число.
В данном свойстве в первом значении хранится нижняя граница зарплаты, во втором верхняя граница.
Для примера salary[0] = 1000 и salary[1] = 5000.

Необходимо таким образом настроить фильтр по этому свойству, чтобы пользователь мог задавать интервал зарплат, например от 500 до 3000. Причем необходимо чтобы значение "от" фильтровало нижнюю границу свойства, а значение "до" - верхнюю.

Например, есть 3 элемента с такой зарплатой:
1) 1000-6000, т.е. salary[0] = 1000, salary[1] = 10000
2) 3000-10000
3) 5000-20000
4) 2000-15000

Если пользователь задал границы от 2500 до 15000, то нужно вывести элементы 2 и 4, т.к. только для них выполняется условие 2500<=salary[0] AND 15000>=salary[1].

Проблема в том, что я не знаю как записать массив arrFilter для такого случая.

Пробовал так:

1.
Код
$arrFilter = array(
   ">=PROPERTY_salary" => "2500",
   "<=PROPERTY_salary" => "15000",
)

и
Код
$arrFilter = array(
   "><PROPERTY_salary" => array("2500", "15000"),
)

Данные варианты работают в том случае если в свойстве salary хранится только одно число, т.е. фактически для одиночного числового свойства

2.
Код
$arrFilter = array(
   ">=PROPERTY_salary" => array(0 => "2500"),
   "<=PROPERTY_salary" => array(1 => "15000"),
)

Работает вообще как-то странно. Первое число фильтрует как 2500>=salary[1], а второе как 15000>=salary[0]

3.
Код
$arrFilter = array(
      "LOGIC" => "AND",
      array(">=PROPERTY_bx_num" => "2500"),
      array("<=PROPERTY_bx_num" => "15000"),
);

Тут выдает ошибку MySQL - ругается на неизвестное поле BE.0

В поддержку обращался, но там так долго приходится ждать каждого ответа, что за неделю я не продвинулся ни на миллиметр в решении этой проблемы.
Кто что посоветует?
спросил 17 Май, 13 от venomik (200 баллов)

5 Ответы

00 голосов
Советую завести два не множественных свойства.
Для нижней границы и для верхней.
ответил 17 Май, 13 от Miso (740 баллов)
00 голосов
Уже думал об этом, но для этого придется вносить изменения в код, править кучу инфоблоков. Не хотелось бы.
ответил 18 Май, 13 от venomik (200 баллов)
00 голосов
А выбора нет, придется. Не думаю, что там сильно много переписывать придется.
ответил 31 Июль, 13 от bazzet (620 баллов)
00 голосов
Так и сделал.
Жаль конечно, что нет более удобного решения.
ответил 02 Ноя, 13 от venomik (200 баллов)
00 голосов
Т.е. сейчас фильтр по множественному свойству не сделать?
Возникла похожая задача.
Фильтр работает, но с логикой "или", т.е. если два значения в фильтре, выбираются элементы в которых присутствует хотябы одно из фильтруемых значений.
ИМХО, так не должно быть
ответил 08 Фев, 14 от FireLuna (580 баллов)

Похожие вопросы

0 голосов
0 ответов
0 голосов
2 ответов
спросил 03 Май, 14 от KeiDen (400 баллов)
0 голосов
3 ответов
спросил 23 Авг, 13 от terik (260 баллов)