@GrimJack

Как лучше сделать поиск по json ячейке?

Пишу проект на laravel, в качестве бд постгрес (надеюсь это как-то поможет).
Есть в таблице json поле в котором хранится массив в виде (массив А) ['0', '12', '3']
И есть еще один массив (массив Б) ['0', '5', '7']
И вот нужно сделать запрос, где хотя бы одно значение из массива Б совпадает с массивом А. Сделать нужно на уровне запроса в бд, дабы не получать и не делать обработку лишних данных.
Какие есть способы для этого?
  • Вопрос задан
  • 1893 просмотра
Решения вопроса 2
0xD34F
@0xD34F
SELECT *
FROM table
WHERE a::jsonb ?| ARRAY(SELECT json_array_elements_text(b))
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Смотрим операторы: https://www.postgresql.org/docs/current/static/fun...
Печально, прямого оператора как && overlap у массивов нет.
?| text[] Do any of these array strings exist as top-level keys?

Зато тот вполне подходит. Значит, заменить json на jsonb затем запрос будет
select * from t where jsonbfield ?| array['0', '5', '7']::text[];

Если на входе удобен именно json массив, а не pg массив, то относительно просто переписывается одно в другое
select * from t where jsonbfield ?| (select array_agg(t) from json_array_elements_text('["0","5","7"]') t);


gin и gist индексы оператор ?| могут обрабатывать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы