Как искать данные JSON в mysql?

Я вставляю свои данные в базу данных с json_encoded . Теперь я хочу искать в «функции», но я не могу.

Запрос Mysql:

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

Этот запрос показывает мне все строки с ключом «1», а значение – это любое значение, которое не равно «3»,

Мои данные:

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

Если у вас есть версия mysql> = 5.7 , вы можете попробовать это –

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

Вывод –

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

Для получения дополнительной информации см. Ссылку ссылки https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html.

  1. Хранение JSON в базе данных нарушает первую нормальную форму.

    Лучшее, что вы можете сделать, это нормализовать и сохранить функции в другой таблице. Затем вы сможете использовать гораздо более привлекательный и эффективный запрос с объединениями. Ваш JSON даже напоминает таблицу.

  2. Mysql 5.7 имеет встроенную функциональность JSON: http://mysqlserverteam.com/mysql-5-7-lab-release-json-functions-part-2-querying-json-data/

  3. Правильный шаблон

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

    [^}] будет соответствовать любому символу кроме}

Если вы используете MySQL, следующая версия может помочь вам достичь вашего требования.

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

Я использую этот запрос

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

Первый запрос я использую для поиска частичного значения. Второй запрос я использую для поиска точного слова.