Я вставляю свои данные в базу данных с 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.
Хранение JSON в базе данных нарушает первую нормальную форму.
Лучшее, что вы можете сделать, это нормализовать и сохранить функции в другой таблице. Затем вы сможете использовать гораздо более привлекательный и эффективный запрос с объединениями. Ваш JSON даже напоминает таблицу.
Mysql 5.7 имеет встроенную функциональность JSON: http://mysqlserverteam.com/mysql-5-7-lab-release-json-functions-part-2-querying-json-data/
Правильный шаблон
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[[:>:]]"';
Первый запрос я использую для поиска частичного значения. Второй запрос я использую для поиска точного слова.