我正在构建一个 API,需要根据语言过滤数据。当使用 { "language": ["Hindi", "English"] } 之类的请求进行过滤时,我想检索与两种语言匹配的行,但只能采用 "language": ["Hindi", "English"] 格式.
但是,我的数据包含变化。例如:
一行:“语言”:[“英语”,“印地语”,“旁遮普语”] 另一行:“语言”:[“英语”,“印地语”] 我想以所需的格式发送两行:“语言”:[“英语”,“印地语”]。重要的是,我想通过查询来实现这一点,而不是修改控制器文件。
Data: {
"id": 169,
"status": 1,
"from_time": "10:30:00",
"to_time": "19:30:00",
"created_at": "2023-11-03 18:05:16",
"updated_at": "2024-03-31 18:11:43",
"language": ["English", "Hindi", "Punjabi"]
},
{
"id": 817,
"status": 1,
"from_time": "10:00:00",
"to_time": "17:30:00",
"created_at": "2024-03-29 17:31:26",
"updated_at": null,
"language": ["English", "Hindi"]
}
查询尝试:
SELECT *
FROM tbl_lang
WHERE language ->> 0 = 'Hindi' AND language ->> 1 = 'English'
我想发送两行,但只喜欢“语言”:[“英语”,“印地语”]。我不想发送像这样的“语言”:[“英语”,“印地语”,“旁遮普语”]这样的数据或像这样的“语言”:[“英语”,“印地语”]的另一种数据。
这可能吗?如果是这样,有人可以提供 PostgreSQL 查询来实现这一点吗?
如果您的列是
jsonb
类型,您可以使用 ?&
运算符:demo
select jsonb_pretty(data) from tbl_lang
where (data->'language') ?& array['English', 'Hindi'];
jsonb_pretty |
---|
{ “id”:169, “状态”:1, “to_time”:“19:30:00”, “语言”:[ “英语”, “印地语”, “旁遮普语” ], "from_time": "10:30:00", "created_at": "2023-11-03 18:05:16", "updated_at": "2024-03-31 18:11:43" } |
{ “id”:817, “状态”:1, “to_time”:“17:30:00”, “语言”:[ "英语", "印地语" ], "from_time ": "10:00:00", "created_at": "2024-03-29 17:31:26", "updated_at": null } |