2016-04-20 7 views
1

私は、 "json"と呼ばれるネイティブJSONフィールド/列を持つpersonsテーブルを持っています。私のテーブルの 最初の行は、列JSONでこのコンテンツを持っている:MySQL 5.7(ネイティブ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

だから - 私の質問は次のとおりです。値ならば、私は検索することができますどのように "車 "はオブジェクト"モビリティ "に存在しますか?

これは動作しません:

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どこにJSON_CONTAINS(personsjson、「車」、「$の.mobility」))

しかし、これはうまく機能:

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

私は「移動性」は、配列が含まれているため、それが問題だと思う...しかし、どのように選択することがあれば要素がこの配列 "モビリティ"に存在しますか?

答えて

4

試してみてください。

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

が、この作品、そんなにありがとう! – goldlife

関連する問題