mysql 查询 json 中的字段是否为特定值

2019-02-01 13:09:35 +08:00
 feihuxiongdi

t1 表中有一字段 items 为 json 类型,存储的内容格式为:

[
  {"id":1,"name":"a"},
  {"id":2,"name":"b"}
]

我想查询是否包含 id 为 1 的表记录的数量,官方的 JSON_CONTAINS 函数好像是对于 json object 的,查询了一下对于 json array 并未查出正确结果。

SELECT COUNT(*) FROM t1 WHERE JSON_CONTAINS(items, 1,'$.id')

请问如何实现?

6195 次点击
所在节点    MySQL
4 条回复
cs8814336
2019-02-18 14:38:08 +08:00
select `remarks` from `addrinfo`

+------------------------------------------+
| remarks |
+------------------------------------------+
| {"test": [{"id": "123"}, {"id": "243"}]} |
| {"test": [{"id": "123"}, {"id": "243"}]} |
| {"test": [{"id": "99"}, {"id": "243"}]} |
| {"test": [{"id": "123"}, {"id": "243"}]} |


select `remarks`->'$.test[*].id' ,json_contains(`remarks`->'$.test[*].id','"123"') from `addrinfo`;

注意 json contains 里面 123 需要用双引号括住!!!
feihuxiongdi
2019-02-19 18:17:05 +08:00
@cs8814336 数据库里存的是

{"test": [{"id": 123}, {"id": 243}]}

不是

{"test": [{"id": __"__ 123 __"__ }, {"id": __"__ 243 __"__ }]}
cs8814336
2019-02-26 08:59:38 +08:00
@feihuxiongdi 什么意思.你那个是 json 结构吗 _"_123_"_ ?
feihuxiongdi
2019-02-26 09:42:30 +08:00
@cs8814336 这是 markdown 加粗失败的结果😂。
总之,按照你的语法查询再稍微修改一下就可以查询出来了。
在此感谢一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/532413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX