powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Поиск в JSON поле
23 сообщений из 23, страница 1 из 1
Поиск в JSON поле
    #39318918
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть поля с данными JSON к примеру [{"id":1000,"text":"sdafsdfsdf"}, {"id":1100,"text":"sdafsdfsdf"}]

Как можно составить запрос попроще для поиска к примеру id > 100?
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39318953
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovikпопрощепопроще, чем что?
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39320223
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.,

Чтоб поместить условие только в WHERE
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39320477
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovik, могу посоветовать расширение jsquery
https://postgrespro.ru/docs/postgrespro/9.5/jsquery
мощная тема-)
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39320495
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
SELECT *
FROM (
  SELECT json_array_elements('[{"id":10,"text":"1111"}, {"id":1000,"text":"2222"}]') as item
) t
WHERE (item->>'id')::int > 100;
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39320507
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu
Код: sql
1.
2.
3.
4.
5.
SELECT *
FROM (
  SELECT json_array_elements('[{"id":10,"text":"1111"}, {"id":1000,"text":"2222"}]') as item
) t
WHERE (item->>'id')::int > 100;



а без ф-ции json_array_elements никак не обойтись?
Xочется оператор который будет в WHERE проверять условие по столбцу, я почему этот вопрос и задал, но видимо только самому писать надо.
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39320541
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Legushkawestvovik, могу посоветовать расширение jsquery
https://postgrespro.ru/docs/postgrespro/9.5/jsquery
мощная тема-)

Да тема интересная, а вы не вкурсе как на jsquery сделать такой запрос, пока разобраться не могу?
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39321003
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovik,
Код: sql
1.
2.
3.
4.
5.
6.
--create extension jsquery
SELECT *
FROM (
  SELECT jsonb_array_elements('[{"id":10,"text":"1111"}, {"id":1000,"text":"2222"}, {"not_id":1500,"text":"2222"}]') as item
) t
WHERE item @@ 'id($ > 100)'::jsquery

я бы еще индекс GIST или GIN накатил что бы быстро работало если у вас много данных

и jsquery работает с jsonb (с json не работает)
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39321006
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovikа без ф-ции json_array_elements никак не обойтись?
ее вам сделали для удобства показа примера, если у вас данные хранятся в колонке типа jsonb, то json_array_elements/jsonb_array_elements не нужно
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39321102
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Legushkawestvovikа без ф-ции json_array_elements никак не обойтись?
ее вам сделали для удобства показа примера, если у вас данные хранятся в колонке типа jsonb, то json_array_elements/jsonb_array_elements не нужно

Это как не понял?

Пример приведите, я чего и прошу, вот есть таблица "a" со столбцом "b" с данными '[{"id":10,"text":"1111"}, {"id":1000,"text":"2222"}]'::jsonb

Как в WHERE будет условие это прописано если без ф-ции json_array_elements?

Хочется конструкцию типа того

SELECT * FROM
(SELECT '[{"id":10,"text":"1111"}, {"id":1000,"text":"2222"}]'::jsonb as a) b
WHERE (b.a->>'id')::int > 100;

Но она не работает (((

jsquery тоже также только через превращения массива с помощью json_array_elements в таблицу со строками из json объектов, или можно искать с помощью оператора @@?
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39321198
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovik,
если я правильно понимаю то в вашем случае в одной строке таблицы а в поле b содержится целая туча записей типа id = 1
id = 2 .. id = 1500 и тд

тогда в вашем примере без функции jsonb_array_elements не обойтись-) она создает ровно столько строк сколько элементов в массиве, и так можно слелать для всех строк

если же в каждой строке таблицы у вас в jsonb только {один ИД + еще энцать разных ключей, которых может и не быть}, то делаете без jsonb_array_elements.


другие способы вам покажутся только длинее: переделать в аррей, вывести аррей построчно, потом опять загнать в jsonb и потом проверить


вам указали функции, используйте их или изобретайте свой велосипед, никто не против)
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39321235
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Legushkawestvovik,
если я правильно понимаю то в вашем случае в одной строке таблицы а в поле b содержится целая туча записей типа id = 1
id = 2 .. id = 1500 и тд

тогда в вашем примере без функции jsonb_array_elements не обойтись-) она создает ровно столько строк сколько элементов в массиве, и так можно слелать для всех строк

если же в каждой строке таблицы у вас в jsonb только {один ИД + еще энцать разных ключей, которых может и не быть}, то делаете без jsonb_array_elements.


другие способы вам покажутся только длинее: переделать в аррей, вывести аррей построчно, потом опять загнать в jsonb и потом проверить


вам указали функции, используйте их или изобретайте свой велосипед, никто не против)

Понятно! Но может тогда кто подскажет, щас опишу вообще задачу:

Мы являемся к примеру посредниками между клиентами и поставщиками, покупаем у нескольких поставщиков продаем клиенту.

Есть таблицы
1. заказы клиентов
2. заказы у поставщиков

таблицы связаны между собой соотвественно FK 1->2 как 1->n

В итоге надо сформировать таблицу где в одной строке было бы соединены и клиент и все связанные поставщики, да и чтоб можно было бы фильтровать и сортировать по всем колонкам да и чтоб еще все это быстро работало, вот я и подумал в строну json, т.к. было бы еще и просто уже это и в интерфесе вывести

может есть какие то другие варианты, а я тут велосипед и правда придумываю?
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39321255
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovik,

вы точно какой то велосипед изобретаете. Опишите структуру таблиц и что вы хотите в итоге получить
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39321414
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovikчтоб можно было бы фильтровать и сортировать по всем колонкам да и чтоб еще все это быстро работало
...а я тут велосипед и правда придумываю?
вам вообще не нужен json на фильтре, вы джоинете данные, сразу применяете фильтры,
на выходе если вам нужно в приложении уже делаете из результата json
а не наоборот (делать json потом по нему фильтр)
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39322231
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Legushkawestvovikчтоб можно было бы фильтровать и сортировать по всем колонкам да и чтоб еще все это быстро работало
...а я тут велосипед и правда придумываю?
вам вообще не нужен json на фильтре, вы джоинете данные, сразу применяете фильтры,
на выходе если вам нужно в приложении уже делаете из результата json
а не наоборот (делать json потом по нему фильтр)

Так не получиться, т.к. я потеряю часть строк при джоине и фильтре, а мне нужно обязательно видеть всю картину, вот пример обрисую щас

Таблица должна выглядеть следующим образом к примеру не суть:


№ договора | Фио клиента | Статус клиента | Дата создания | Полная стоимость для клиента |
с клиентом
№ Договора
с поставщиком | Назв. поставщ. | Статус поставки | Дата создания | Стоимость для нас |


Вот это одна строка в таблице.

К примеру у нас есть 3 поставщика на одного клиента, у них у всех разные статусы, при фильтрации по определенному статусу я не должен потерять остальных 2 поставщиков, т.е. должны вылезти все три но у кого то из них должен быть запрошенный статус

и таких записей в таблице может быть много, по сути это список договоров с клиентами и наши обязанности перед клиентами

Если использовать джон и фильтр то буду терять записи вместо 3х поставщиков будет клиент и один поставщик что не приемлемо т.к. не отображает всей картины.

Суть по факту что тут таблица в таблице но со всеми фильтрами, вот я и думаю как это решить.
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39322979
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovik,

Такие задачи решают на нормальных таблицах а не на JSON.
JSON для хранения слабоформализованных доков с запутанной структурой куда база внутрь (а тем более внутрь по сложной логике) не ходит.
Т.е. у вас проблем в дизайне базы.


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39323001
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukwestvovik,

Такие задачи решают на нормальных таблицах а не на JSON.
JSON для хранения слабоформализованных доков с запутанной структурой куда база внутрь (а тем более внутрь по сложной логике) не ходит.
Т.е. у вас проблем в дизайне базы.


--
Maxim Boguk
www.postgresql-consulting.ru


Причем тут дизайн базы, вы читаете, что я описал? Дизайн базы правильный, дело в выводе сложной вложенной таблицы, мне нужно именно так выводить!!!

P.S. Поэтому и спрашиваю быть может есть разумные другие варианты
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39323007
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovikсложной вложенной таблицыТо есть, ты сначала собрал данные в json, потому что не умеешь писать джоин. Но ведь и jsonом ты не владеешь. Не проще ли было исходную постановку озвучить?
Только будь любезен, все тебе будут "обязаны", приводи репрезентативные тестовые данные и какой должен получиться результат.
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39323134
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.westvovikсложной вложенной таблицыТо есть, ты сначала собрал данные в json, потому что не умеешь писать джоин. Но ведь и jsonом ты не владеешь. Не проще ли было исходную постановку озвучить?
Только будь любезен, все тебе будут "обязаны", приводи репрезентативные тестовые данные и какой должен получиться результат.

Я не понимаю вы не читаете чтоль всю ветку? Помойму все уже расписано детально, и JSON уже не причем, это была идея всего лишь!!!!!

Начнем с начало:

Мы являемся к примеру посредниками между клиентами и поставщиками, покупаем у нескольких поставщиков продаем клиенту.

Есть таблицы
1. заказы клиентов
2. заказы у поставщиков

таблицы связаны между собой соотвественно FK 1->2 как 1->n

ИТОГОВАЯ ТАБЛИЦА VIEW

Таблица должна выглядеть следующим образом к примеру не суть:

№ договора с клиентом | Фио клиента | Статус клиента | Дата создания | Полная стоимость для клиента |
№ Договора с поставщиком | Назв. поставщ. | Статус поставки | Дата создания | Стоимость для нас |

Вот это одна строка в таблице.

К примеру у нас есть 3 поставщика на одного клиента, у них у всех разные статусы, при фильтрации по определенному статусу я не должен потерять остальных 2 поставщиков, т.е. должны вылезти все три но у кого то из них должен быть запрошенный статус

и таких записей в таблице может быть много, по сути это список договоров с клиентами и наши обязанности перед клиентами

Если использовать джон и фильтр то буду терять записи вместо 3х поставщиков будет клиент и один поставщик что не приемлемо т.к. не отображает всей картины.

ЕСЛИ ВЫ Считаете не правильный дизайн базы у меня, тогда предложите без голословности свой вариант

P.S. JOIN я пользоваться умею)
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39323143
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovik,

Вас попросили привести тестовые наборы данных в 3-5-10 записей и требуемые результаты.
Пока не понятно чем именно вас не устраивает JOIN.
И что значит "фильтрация без фильтрации".
Поиск по какому полю идет то?
Вот эта фраза " у них у всех разные статусы, при фильтрации по определенному статусу я не должен потерять остальных 2 поставщиков, т.е. должны вылезти все три но у кого то из них должен быть запрошенный статус" - без тестового набора данных или нормальной формулировки вида "если - то" никому в форуме не понятна.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39323183
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukwestvovik,

Вас попросили привести тестовые наборы данных в 3-5-10 записей и требуемые результаты.
Пока не понятно чем именно вас не устраивает JOIN.
И что значит "фильтрация без фильтрации".
Поиск по какому полю идет то?
Вот эта фраза " у них у всех разные статусы, при фильтрации по определенному статусу я не должен потерять остальных 2 поставщиков, т.е. должны вылезти все три но у кого то из них должен быть запрошенный статус" - без тестового набора данных или нормальной формулировки вида "если - то" никому в форуме не понятна.

--
Maxim Boguk
www.postgresql-consulting.ru

Вот пример прикрепил из рабочего проекта, тут суть к примеру что туроператоров несколько у клиента и если мы по ним фильтруем, вот возьмем к примеру первую строчку, там оба библиоглобуса, но вот если бы были разные и мы бы фильтровали по библиоглобусу, я не должен потерять этого второго другого, тоже самое и со статусами да и прочими столбцами, такие примеры для очевидности даю.

А почему я использовать json хотел так это из за того, что проект пишем на extjs и удобно просто строить таблицу такую не форматную. Вот тут щас сделано на JSON но через велосипед там поля к примеру название туроператора заполнено след образом [{id: 1111, name:"Библиоглобус"}, {id: 2222, name:"Тез-тур"}] и причем этот столбец в базе идет как текстовый поэтому по нему я ищу просто очень.

Просто пришлось триггер прикрутить который при изменениях в таблице перезаписывает поля.

Так вот возможно ли улучшить данный алгоритм или нет, я поэтому и начал эту тераду тут
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39323189
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovik,

Не умеете вы объяснять ну вот совсем.
Я бы предположил что вы не можете придумать запрос вида:

Код: plsql
1.
2.
3.
4.
5.
6.
with t1 as (
select * from users
join suppliers using (supplier_id)
),
t2 as (select user_id from t1 where supplier.status=somestatus)
select * from t1 where user_id IN (select t2.user_id from t2);



или 25 разных его вариаций с WITH или без.


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Поиск в JSON поле
    #39323206
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Bogukwestvovik,

Не умеете вы объяснять ну вот совсем.
Я бы предположил что вы не можете придумать запрос вида:

да не, скорее они задачу клиента -- построение отчета по обычному роусету (с подавлением повторных выводов префиксов группы--что обычная опция у всяких репортов) хотят решить на стороне БД -- сшивкой джейсонов и скармливанием оных какой-нито тулзе по отрисовке уже джейсонов.

наверное имеют право.
но лучше бы клиентами овладевали полнее и , не побоюсь этого слова, -- глубжее, имхо.

вот только почему у них задача фильтрации прорезаицца после сшивки джейсонов, когда проще было бы фильтровать до -- ума не приложу. наверное не понял чего в этом сумбуре.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Поиск в JSON поле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]