支持本机JSON的MySQL 5.7 - 如何选择数组中存在特定值的行?

时间:2016-04-20 10:24:53

标签: mysql arrays json mysql-5.7

我有一个带有本地JSON字段/列的人员表,名为" json"。 我的表的第一行在json:

列中有这个内容
{"misc": [{"sdsd": "sdsdsd"}], "size": 178, "social": {"skype": "4455454", "myspace": "fw2121ege", "twitter": "wr4541", "facebook": "frfsfsfasfsf"}, "mobility": ["forklift_sparkle", "license_for_passenger_transport", "car", "driver_license"], "piercing": true, "shoesize": 43, "trousers": {"width": 32, "length": 32}, "haircolor": "black", "shoe_size": 43, "additional_career": [{"ddgdgdg": "dggdgddg"}], "additional_social": [{"StudiVZ": "sfsfsfsf"}], "additional_language": [{"gfggfgf": "good"}], "additional_mobility": ["sfsf"]}

或格式良好:

http://www.jsoneditoronline.org/?id=bcceb2f1ec208ea23737ee32c1ccc5a3

所以 - 我的问题是:如何搜索价值" car"存在于对象"移动性"?

这不起作用:

SELECT * FROM `Persons` WHERE JSON_EXTRACT(`persons`.`json`,"$.mobility[*]") = 'car' 

(没有结果)

也行不通:

SELECT * FROM `Persons` WHERE JSON_SEARCH(`persons`.`json`, 'all', 'car', NULL, '$.mobility[*]')

(没有结果)

这(使用JSON_CONTAINS)也不起作用:

SELECT * FROM `Persons` WHERE JSON_CONTAINS(`persons`.`json`, 'car', "$.mobility")

(给出错误:SELECT * FROM Persons WHERE JSON_CONTAINS(personsjson,' car'," $。mobility") )

但这很有效:

SELECT * FROM `Persons` WHERE JSON_CONTAINS(`persons`.`json`, '178', "$.size")

我认为这是一个问题因为"移动性"包含一个数组...但是如何选择这个数组中是否存在一个元素" mobility" ?

1 个答案:

答案 0 :(得分:4)

尝试:

SELECT *
FROM `Persons`
WHERE JSON_CONTAINS(`Persons`.`json`, '["car"]', '$.mobility');