2016-03-27 17 views
12

Diciamo che ho una colonna JSON denominata data in qualche tabella mysql e questa colonna è un singolo array. Quindi i dati possono contenere: [1,2,3,4,5] per esempio. Ora voglio selezionare tutte le righe che hanno una colonna di dati in cui uno dei suoi elementi di matrice è maggiore di 2. È possibile? Ho provato quanto segue, ma sembra è sempre vero indipendentemente dai valori nella matrice:Come cercare json array in mysql?

SELECT * from my_table where JSON_EXTRACT(data, '$[*]') > 2; 
+0

È possibile cercare gli array JSON in postgresql, normalmente come altri campi, in mysql è necessario eseguire la ricerca utilizzando le funzioni mysql che è possibile trovare qui: https://dev.mysql.com/doc /refman/5.7/en/json-search-functions.html – Thresh

+0

Grazie, ma non sono riuscito a trovare un modo per cercare json array usando queste funzioni –

+0

Sei riuscito a trovare una soluzione per questo? –

risposta

1

Un modo possibile è quello di affrontare il problema come stringa corrispondente. Converti il ​​JSON in stringa e abbina.

Oppure è possibile utilizzare JSON_CONTAINS.

+0

Non sono sicuro che la corrispondenza delle stringhe funzionerà come voglio confrontare per maggiore dell'uguaglianza, lo stesso vale per json_contains, cerca esatto contenere, non confrontare le funzioni. –

0

Non so se abbiamo trovato la soluzione. Ho trovato con MariaDB un modo, per cercare il percorso in un array. Ad esempio, in ordine di [{ "id": 1}, { "id": 2}], voglio trovare il percorso con id pari a 2.

SELECT JSON_SEARCH('name_field', 'one', 2, null, '$[*].id') 
FROM name_table 

Il risultato è:

"$[1].id" 

L'asterisco indica la ricerca dell'intero array