如何通过单个属性的值从数组返回对象

t98cgbkg  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(326)

mysql版本:5.7.19
表:用户
表用户中的字段:竞赛
类型字段:json
野外竞赛中的数据示例

[{"name": "Mihaello Julders", "text": "any text", "photo": "photo.jpg", "profileLink": "any link"}, {"name": "Алексей Якобчук", "text": "any text", "photo": "photo.jpg", "profileLink": "any link"}]

问题:如果属性名包含指定的名称,则需要返回一个或多个对象。
我是否正确理解我需要使用

select
JSON_EXTRACT(members, "$[*].name") from `users` where JSON_EXTRACT(members, "$[*].name") = 'Mihaello Julders'

但是这不起作用,请告诉我如何正确地编写此查询?

tct7dpnv

tct7dpnv1#

在学习了文档之后,我进行了下一个查询

select
        JSON_EXTRACT(contests, JSON_UNQUOTE(JSON_SEARCH(contests->'$[*].name', 'one', '%Mihaello%')))
    from 
        users

这解决了我的问题

hsgswve4

hsgswve42#

你的工作是什么 users table是什么样子?如果你愿意的话 nusers.contests 正如你在问题中提到的,假设table上有 contests 列,

select
contests
from users
where JSON_EXTRACT(members, "$[*].name") = 'Mihaello Julders';

这会给你 n 用户竞争的行,其中 users.members (json列)具有指定的 name 财产(米哈耶罗·朱尔德)。
编辑
有关更多信息,请参阅文档。上面提到的解决方案返回一个空集。这可能是因为您的users表是空的,或者json有问题——要么您查找了错误的名称,要么name属性不在您认为的位置。
如果您的表中有值,这个答案将返回一个非空集 members 柱状

[
    {" name": "Michaello Julders"}
]

相关问题