2015-05-23 12 views
14

Wstawiam moje dane do bazy danych z json_encoded. Teraz chcę wyszukać w "funkcji", ale nie mogę.Jak wyszukiwać dane JSON w mysql?

Mysql zapytanie:

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

To zapytanie pokazuje mi wszystkie wiersze z klucza "1", a wartością jest jakaś rzecz nie wartość "3"

Moje dane to:

{"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

chcę pokazać mi cały zapis, że kluczem jest „1” i „3” jest jedną z wartości – reza

+0

Explain „nie mogę”! Jakie masz wyniki? – Ajoy

+0

Chcę pokazać wszystkie produkty, których identyfikatorem funkcji jest 1, a jedną z wartości funkcji jest 3 cechą tablicy jest: cecha = tablica ( 1 => tablica (1,2,3), 2 => tablica (1 , 4,7) ) używam jsonencode, aby zapisać go w bazie danych – reza

Odpowiedz

8
  1. Przechowywanie JSON w bazie danych narusza pierwszy normalny formularz.

    Najlepsze, co można zrobić, to znormalizować i zapisać funkcje w innej tabeli. Wtedy będziesz mógł użyć znacznie lepiej wyglądającego i wydajniejszego zapytania z połączeniami. Twój JSON przypomina nawet stół.

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

  3. Prawidłowy wzór jest:

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

    [^}] dopasuje dowolny znak z wyjątkiem }

3

używam tej kwerendy

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[[:>:]]"'; 

Pierwsze zapytanie używam do wyszukiwania wartości częściowej. Drugie zapytanie używam do wyszukiwania dokładnego słowa.

+0

MySQL 5.7 wreszcie obsługuje JSON.Trwa to jednak długo, zanim ta aktualizacja trafi do głównego nurtu, ale jako szybki odnośnik jest to prosty sposób na wyodrębnienie niektórych informacji. Dzięki! – timothymarois

+0

To nie działa dla mnie. Mam strukturę taką jak '{" obrazy ":" - "}' i 'SELECT id Z parsed_redfin GDZIE' dane' RLIKE '"obrazy": "[[: <:]]-[[:>:]]"'; 'nie zwraca niczego. – Volatil3

19

Jeśli masz MySQL w wersji> = 5.7, to można spróbować -

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

Wyjście -

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

Proszę sprawdzić linku referencyjnego dla więcej szczegółów https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

5

Jeśli twoje używają MySQL Najnowsza wersja może pomóc w spełnieniu twoich wymagań.

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

co zrobić masz na myśli najnowszą wersję mysql? w jakiej wersji jest obsługiwana? –

+0

w jakiej wersji obsługiwany jest operator IN? –

+0

MySQL 5.5 i powyżej @ Sérgio –

Powiązane problemy