Задать вопрос
WebDev2030
@WebDev2030
Битриксоид до мозга и костей

Как осуществить поиск (like) по полю в массиве в json колонке?

Есть поле phones которое содержит похожие данные:
[
{"field": "Дополнительное поле", "phone": "70000000001"}, 
{"field": "Внутренний 999", "phone": "70000000002"}, 
{"field": null, "phone": "70000000003"}
]

Как можно выполнить like запрос по полю phone в каждом массиве?
  • Вопрос задан
  • 206 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Сделать нормализацию структуры базы.
Перенести JSON в таблицу user_phone.
Поля:
phone_id, -- первичный ключ телефона
user_id, -- внешний ключ, кому относится телефон
phone, -- телефон
phone_comment, -- комментарий к телефону
-- еще поля по вкусу, но иногда выручающие
is_main, -- основной не основной/порядок приоритета
add_date -- дата внесения телефона
И в запросах уже нормально джойнить и лайкать эту таблицу.
PS:
В качестве временного костыля (ни в коем случае не оставлять на постоянной основе!):
SELECT Users.*,
       ph.value->>'phone' as phone
FROM Users, json_array_elements(Users.phones) as ph
where ph.value->>'phone'   like '7%3';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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