2016-08-05 1 views
1

ich eine json Spalte mit dem Follow-Array habe:Abfrage einer JSON Spalte mit einer Reihe von Objekt in MySQL

[ 
    { 
    "id": "24276e4b-de81-4c2c-84e7-eed9c3582a31", 
    "key": "id", 
    "type": "input", 
    }, 
    { 
    "id": "e0ca5aa1-359f-4460-80ad-70445be49644", 
    "key": "name", 
    "type": "textarea", 
    } 
] 

ich die Folge Abfrage versucht, die Reihe zu bekommen, die die ID 24276e4b-de81-4c2c-84e7-eed9c3582a31 in der Spalte Dokument hat, aber es gibt keine Ergebnisse zurück:

select * from jobs WHERE document->'$[*].id' = "24276e4b-de81-4c2c-84e7-eed9c3582a31" 

Wer weiß, wie die richtige Abfrage zu tun?

+1

Können Sie erarbeiten, wie Ihr Code „funktioniert nicht“? Was hast du erwartet und was ist eigentlich passiert? Wenn Sie eine Ausnahme/einen Fehler erhalten haben, geben Sie die Zeile, auf der sie aufgetreten ist, und die Ausnahme-/Fehlerdetails an. Bitte [bearbeiten] Sie diese Details oder wir können Ihnen möglicherweise nicht weiterhelfen. – FrankerZ

Antwort

-1

Wenn Sie document->'$[*].id' verwenden, wird eine durch Kommas getrennte Liste aller ID-Eigenschaften zurückgegeben. Dies entspricht nicht dem Wert von nur einer ID-Zeichenfolge, es sei denn, in der Spalte document befindet sich nur ein Objekt.

Sie müssen JSON_SEARCH() verwenden, um nach einem übereinstimmenden Element innerhalb des JSON-Werts zu suchen.

SELECT * 
FROM jobs 
WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id'); 
+0

Vielen Dank für Ihre Erklärung, aber die Verwendung von json_search gibt immer noch 0 Zeilen zurück –

+0

Leider habe ich keine MySQL 5.7-Instanz zum Testen. – Barmar

2

wie diese versuchen:

SELECT * FROM jobs WHERE document->'$[*].id' = json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31"); 

es funktioniert für mich, und ich denke, der Schlag Weg ist mehr bettter:

SELECT * FROM jobs WHERE json_contains(document->'$[*].id', json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31")); 

Eigentlich erinnern Es ist einfach nur der Rückgabewert JSON_TYPE aber keine Schnur oder etwas anderes;

2

Ich benutze MySQL 5.7 und so JSON_CONTAINS leicht wie folgt verwendet werden kann:

SELECT JSON_CONTAINS(
       '[{"id": "24av","name": "she"},{"id": "e0c2", "name": "another_she"}]', 
       JSON_OBJECT('id', "e0c2") 
       ); 
Verwandte Themen