guardar functions from example data mysql json mysql-json

functions - mysql json to table



¿Cómo buscar datos JSON en MySQL? (5)

  1. Almacenar JSON en la base de datos viola la primera forma normal.

    Lo mejor que puede hacer es normalizar y almacenar características en otra tabla. Entonces podrá utilizar una consulta con un aspecto mucho mejor y con uniones. Su JSON incluso se parece a la mesa.

  2. Mysql 5.7 tiene una funcionalidad JSON integrada:
    http://mysqlserverteam.com/mysql-5-7-lab-release-json-functions-part-2-querying-json-data/

  3. El patrón correcto es:

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

    [^}] coincidirá con cualquier carácter excepto }

Estoy insertando mis datos en una base de datos con json_encoded . Ahora quiero buscar en "función", pero no puedo.

Consulta MySQL:

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

Esta consulta me muestra todas las filas con la clave "1" y el valor es cualquier cosa, no el valor es "3"

Mis datos son:

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


Si está utilizando MySQL, la siguiente versión más reciente puede ayudarlo a cumplir con sus requisitos.

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


Si tiene la versión MySQL> = 5.7 , puede probar esto:

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

Salida:

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


Consulte el manual de referencia de MySQL para obtener más detalles:
https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html


Yo uso esta consulta

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 primera consulta la uso para buscar valor parcial. La segunda consulta la uso para buscar la palabra exacta.


para MySQL todos (y 5.7)

SELECT LOWER(TRIM(BOTH 0x22 FROM TRIM(BOTH 0x20 FROM SUBSTRING(SUBSTRING(json_filed,LOCATE(''/"ArrayItem/"'',json_filed)+LENGTH(''/"ArrayItem/"''),LOCATE(0x2C,SUBSTRING(json_filed,LOCATE(''/"ArrayItem/"'',json_filed)+LENGTH(''/"ArrayItem/"'')+1,LENGTH(json_filed)))),LOCATE(0x22,SUBSTRING(json_filed,LOCATE(''/"ArrayItem/"'',json_filed)+LENGTH(''/"ArrayItem/"''),LOCATE(0x2C,SUBSTRING(json_filed,LOCATE(''/"ArrayItem/"'',json_filed)+LENGTH(''/"ArrayItem/"'')+1,LENGTH(json_filed))))),LENGTH(json_filed))))) AS result FROM `table`;