2017-12-09 12 views
0

Ich habe JSON-Arrays als Zeichenfolgen in einer MariaDB-Tabelle gespeichert. Ich möchte die Zeilen zurückgeben, wenn bestimmte Schlüsselwerte irgendwo im Array vorhanden sind.MariaDB JSON Funktionen mit Arrays

Ich führte den folgenden Test ....

set @json='[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]' 

die folgende Abfrage Ausgeführt ...

select json_value(@json,'$[0].name')='Albert' 

Es hat mich um das gewünschte Ergebnis, das ist ...

1 

Auch die folgende Abfrage gab mir auch das gleiche Ergebnis (möglicherweise wird '*' als erstes Element behandelt) ...

select json_value(@json,'$[*].name')='Albert' 

Aber als ich den zweiten Namen ("John") in dem Zustand zur Verfügung stellen, ich bekomme kein Ergebnis ...

select json_value(@json,'$[*].name')='John' 

Ergebnis ...

0 

Meine Beobachtung ist also, dass die "json_value" -Funktion das gewünschte Ergebnis liefern kann, wenn wir den Array-Index bereitstellen.

Gibt es eine Möglichkeit, den Array-Index nicht anzugeben und den gewünschten Schlüsselwert zu suchen?

+1

Versuchen [JSON_SEARCH] (https://mariadb.com/kb/en/library/json_search/), siehe [dbfiddle] (http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=4620e2cf592fda2a9dd788ec5f98962a). – wchiquito

Antwort

0

Wie von @dbfiddle kommentiert habe ich versucht mit JSON_SEARCH Funktion.

Hier ist, was ich versuchte, um das gewünschte Ergebnis zu erhalten.

create table label_test(labels VARCHAR(1000)); 

insert into label_test values ('[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]'); 

select * from label_test where JSON_SEARCH(labels,'all','John') like '"$[%].name"'; 

Das Ergebnis ist die ganze Zeile wie erwartet.

[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]