如何解决根据 JSON-Object 键值在表中查找行
我有一个 MySQL 数据库,其中有一个名为 users 的表。这个表有一些列。在名为 actions 的列中存储了 JSON 对象。例如:
{
"name": "joe","tasks": [
{
"id": "1","type": "wait","value": "s*2*c"
},{
"id": "2","type": "run","value": "a*c*47I*x"
}
]
}
我的目标是检索所有包含类型为“run”的 JSON 对象且其值包含多个星号 * 的行。考虑到数组任务可以有不同顺序的多个对象,这可能吗?
解决方法
您需要为此使用 JSON_TABLE():
mysql> select j.* from users cross join
-> json_table(users.actions,'$.tasks[*]' columns ( type varchar(10) path '$.type',value varchar(20) path '$.value')) as j
-> where type='run' and value like '%*%*%';
+------+-----------+
| type | value |
+------+-----------+
| run | a*c*47I*x |
+------+-----------+
如果您仍在使用 MySQL 5.x,那么如果您需要以这种方式进行搜索,那么最好的选择是将数据存储在普通的行和列中。也就是说,不要将数据存储为 JSON。
事实上,即使您有 MySQL 8.0,这也是最好的选择。下面是不是更简单了?
select user_id from tasks
where type='run' and value like '%*%*%';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。