GOOGLE ADS

пятница, 15 апреля 2022 г.

Как написать этот оператор SQL в DQL (postgreSQL)

У меня есть несколько подходов, но из-за сложности запроса sql. Я установил и использовал JSON_GET_TEXT: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Postgresql\JsonGetText JSON_EXTRACT_PATH: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Postgresql\JsonExtractPath

но безрезультатно из-за характера json

select * from workshop_session where author -> 0 ->> 'id' = '2'

{author: 
[
{"id": 2, "email": "example@example.com"},
{"id": 3, "email": "example2@example.com"}
]
}

ЦЕЛЬ состоит в том, чтобы использовать ключ поля json, то есть идентификатор, в предложении where.


Решение проблемы

Вы должны использовать jsonbтип вместо того json, если вам нужно использовать ключи в условиях. Чтобы получить желаемый результат, измените тип столбца на jsonb, доктрина ORM очень хорошо это поддерживает. И используйте jsonb_path_existsфункцию в своем WHEREпредложении.

select * FROM workshop_session WHERE jsonb_path_exists(author, '$[*].id? (@ == 2)')

Демо DBFiddle. Этот запрос вернет сеансы, в которых идентификатор автора = 2.

$[*].id- путь к значению id в вашем массиве объектов jsonb

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...