2015-05-23 21 views
14

Sto inserendo i miei dati in un database con json_encoded. Ora voglio cercare in "funzionalità", ma non posso. interrogazioneCome cercare i dati JSON in mysql?

Mysql:

SELECT `id` , `attribs_json` 
FROM `products` 
WHERE `attribs_json` REGEXP '"1":{"value":[^"3"$]' 

Questa query mi mostra tutte le righe con il tasto "1" e il valore è qualsiasi cosa che non valore è "3"

I miei dati sono:

{"feature":{"1":{"value":"["2","3"]"}, 
      "2":{"value":["1"]}, 
      "5":{"value":""}, 
      "3":{"value":["1"]}, 
      "9":{"value":""}, 
      "4":{"value":"\u0633\u0627\u062a\u0646"}, 
      "6":{"value":""}, 
      "7":{"value":""}, 
      "8":{"value":""} 
      }, 
"show_counter":"0", 
"show_counter_discount":"" 
}} 
+0

voglio mostrarmi tutto record che chiave è "1" e "3" è uno dei valori – reza

+0

spiegare "non può"! Che risultato ottieni? – Ajoy

+0

Voglio mostrare tutti i prodotti che l'ID della funzione è 1 e uno dei valori della funzione è 3 la funzione è array come questa: feature = array ( 1 => array (1,2,3), 2 => array (1 , 4,7) ) sto usando jsonencode per salvarlo nel database – reza

risposta

8
  1. La memorizzazione di JSON nel database viola la prima forma normale.

    La cosa migliore che puoi fare è normalizzare e memorizzare le caratteristiche in un'altra tabella. Quindi sarai in grado di utilizzare una query molto più bella ed efficiente con i join. Il tuo JSON assomiglia addirittura al tavolo. funzionalità

  2. Mysql 5.7 ha incorporato JSON:
    http://mysqlserverteam.com/mysql-5-7-lab-release-json-functions-part-2-querying-json-data/

  3. modello corretto è:

    WHERE `attribs_json` REGEXP '"1":{"value":[^}]*"3"[^}]*}' 
    

    [^}] corrisponderà con ogni carattere eccetto }

3

Io uso questa query

SELECT id FROM table_name WHERE field_name REGEXP '"key_name":"([^"])key_word([^"])"'; 
or 
SELECT id FROM table_name WHERE field_name RLIKE '"key_name":"[[:<:]]key_word[[:>:]]"'; 

La prima query la utilizzo per cercare valori parziali. La seconda query la uso per cercare la parola esatta.

+0

MySQL 5.7 ha finalmente il supporto JSON.Tuttavia ci vorrà un po 'per quell'aggiornamento, ma come riferimento rapido questo è un modo semplice per estrarre alcune informazioni. Grazie! – timothymarois

+0

Non funziona per me. Ho una struttura come '{" images ":" - "}' e 'SELECT id FROM parsed_redfin WHERE' data' RLIKE '"images": "[[: <:]]-[[:>:]]"'; 'non restituisce nulla – Volatil3

19

Se hai mysql versione> = 5.7, allora si può provare questo -

SELECT JSON_EXTRACT(name, "$.id") as name 
FROM table 
WHERE JSON_EXTRACT(name, "$.id") > 3 

uscita -

+-------------------------------+ 
| name       | 
+-------------------------------+ 
| {"id": "4", "name": "Betty"} | 
+-------------------------------+ 

Si prega di verificare collegamento di riferimento per maggiori dettagli https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

5

Se stai usando MySQL L'ultima versione successiva potrebbe aiutarti a raggiungere i tuoi requisiti.

select * from products where attribs_json->"$.feature.value[*]" in (1,3) 
+0

cosa fare intendi con l'ultima versione di mysql? in quale versione è supportato? –

+0

in quale versione è supportata l'operatore IN? –

+0

MySQL 5.5 e sopra @ Sérgio –