MySQL では、JSON オブジェクトの配列内で特定のノードを見つけるのが難しい場合があります。これに対処するには、JSON_SEARCH 関数と JSON_CONTAINS 関数の利用を検討してください。ただし、これらの関数を組み合わせてクエリを簡素化することが常に実現できるわけではありません。
MySQL 8.0 は、JSON_TABLE() 関数を使用したソリューションを提供します。この関数は、JSON ドキュメントから仮想派生テーブルを作成し、それを行と列として効果的に扱います。 。これにより、JSON データに対して選択や射影などの操作を実行できるようになります。
デモとして、サンプル データをテーブルに挿入してみましょう。
<code class="sql">create table mytable ( mycol json ); insert into mytable set mycol = '[{"Race": "Orc", "strength": 14}, {"Race": "Knight", "strength": 7}]';</code>
JSON_TABLE() を使用して、次のことができるようになりました。仮想テーブルを作成します:
<code class="sql">SELECT j.* FROM mytable, JSON_TABLE(mycol, '$[*]' COLUMNS ( race VARCHAR(10) PATH '$.Race', strength INT PATH '$.strength' )) AS j;</code>
これにより、次の結果が生成されます:
race | strength |
---|---|
Orc | 14 |
Knight | 7 |
特定の種族の強さを取得するには、WHERE 句を使用できます:
<code class="sql">SELECT j.strength FROM mytable, JSON_TABLE(mycol, '$[*]' COLUMNS ( race VARCHAR(10) PATH '$.Race', strength INT PATH '$.strength' )) AS j WHERE j.race = 'Orc';</code>
これにより、次の結果が返されます:
strength |
---|
14 |
ただし、このアプローチではクエリで属性フィールドを指定する必要があり、属性定義が不明なデータセットには適していない可能性があります。
以上がMySQL で JSON 配列から特定のキー値を効率的に抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。