In MySQL kann das Finden eines bestimmten Knotens in einem Array von JSON-Objekten eine Herausforderung sein. Um dieses Problem zu beheben, können Sie die Verwendung der Funktionen JSON_SEARCH und JSON_CONTAINS in Betracht ziehen. Eine Kombination dieser Funktionen zur Vereinfachung der Abfrage ist jedoch nicht immer möglich.
MySQL 8.0 bietet eine Lösung mit der Funktion JSON_TABLE(), die eine virtuelle abgeleitete Tabelle aus einem JSON-Dokument erstellt und diese effektiv als Zeilen und Spalten behandelt . Dadurch können Sie Vorgänge wie Auswahl und Projektion auf die JSON-Daten ausführen.
Zur Veranschaulichung fügen wir Ihre Beispieldaten in eine Tabelle ein:
<code class="sql">create table mytable ( mycol json ); insert into mytable set mycol = '[{"Race": "Orc", "strength": 14}, {"Race": "Knight", "strength": 7}]';</code>
Sie können jetzt JSON_TABLE() verwenden, um Erstellen Sie eine virtuelle Tabelle:
<code class="sql">SELECT j.* FROM mytable, JSON_TABLE(mycol, '$[*]' COLUMNS ( race VARCHAR(10) PATH '$.Race', strength INT PATH '$.strength' )) AS j;</code>
Dies führt zu folgendem Ergebnis:
race | strength |
---|---|
Orc | 14 |
Knight | 7 |
Um die Stärke einer bestimmten Rasse abzurufen, können Sie eine WHERE-Klausel verwenden:
<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>
Dies gibt das folgende Ergebnis zurück:
strength |
---|
14 |
Dieser Ansatz erfordert jedoch, dass Sie die Attributfelder in Ihrer Abfrage angeben, die möglicherweise nicht für Datensätze mit unbekannten Attributdefinitionen geeignet sind.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich bestimmte Schlüsselwerte effizient aus JSON-Arrays in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!