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

时间:2018-12-23 12:02:21

标签: mysql

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'

但是这不起作用,请告诉我该查询写什么正确的字?

2 个答案:

答案 0 :(得分:0)

您的users表格是什么样的?如果您要在问题中提到n的{​​{1}}行,那么假设该表有一个users.contests列,

contests

这将为您提供select contests from users where JSON_EXTRACT(members, "$[*].name") = 'Mihaello Julders'; 行用户竞赛,其中n(您的json列)具有指定的users.members属性(Mihaello Julders)。

编辑

有关更多信息,请参见docs。您提到上面的解决方案返回一个空集。这是因为您的用户表为空,或者是json出现问题-您正在寻找错误的名称,或者名称属性不在您认为的位置。

如果您的name列中有值,例如

,则此答案将返回一个非空集
members

答案 1 :(得分:0)

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

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

这解决了我的问题