Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql5.7 json对象-数组的查询元素_Mysql_Json_Mysql 5.7 - Fatal编程技术网

mysql5.7 json对象-数组的查询元素

mysql5.7 json对象-数组的查询元素,mysql,json,mysql-5.7,Mysql,Json,Mysql 5.7,我在mysql5.7上使用JSON对象类型。如果我有一个具有一个级别的json对象,那么我可以很好地工作,但是如果我有一个包含一个对象数组的对象,那么在查询数组中的值时就会遇到问题 这是我的桌子: id (int) | json_data (JSON) ----------------------------------------------------------------- 1 | {'name':'joe', 'array':[{'prop':first','value'

我在mysql5.7上使用JSON对象类型。如果我有一个具有一个级别的json对象,那么我可以很好地工作,但是如果我有一个包含一个对象数组的对象,那么在查询数组中的值时就会遇到问题

这是我的桌子:

id (int) | json_data (JSON)
-----------------------------------------------------------------
   1     | {'name':'joe', 'array':[{'prop':first','value':'1'},
         |    {'prop':second','value':'2'}]}
   2     | {'name':'bob', 'array':[{'prop':third','value':'3'}]}
我正在尝试编写一个查询,该查询将检索数组中包含值为1的对象的所有记录

我尝试了以下查询:

SELECT * from myTable where json_data->'$.array[0].value' = '1'; 
它可以工作,但只是因为我专门检查数组中的第一个值。如何检查数组的所有元素

我尝试使用
json\u data->'$.array[*].value'
json\u data->'$.array[.].value'
json\u data->'$.array[?].value'
,但都不起作用

搜索数组中所有元素的方法是什么?

您可以使用函数。此函数返回json对象中给定字符串的路径,但您也可以使用它来检索结果,因为如果元素不存在,它将返回null

在您的情况下,运行:

select JSON_SEARCH(json_data, 'all', '1', null, '$.array[*].value') from myTable
将为第一行返回
'$.array[0].value'
,为第二行返回
null

因此,请使用该选项:

select * from myTable where JSON_SEARCH(json_data, 'all', '1', 
null, '$.array[*].value') is not null

只获取第一行。

@Domezchoc-对json列进行索引并非易事。不能在json中为特定字段编制索引。您可以做的是从json的特定字段创建一个
生成的列
,并为该列编制索引。不过,我不确定它在搜索或数组中如何工作。您可以在此处阅读更多信息: