Búsqueda en campos MySQL con JSON de varios niveles

  • Autor Autor jerber
  • Fecha de inicio Fecha de inicio
J

jerber

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos, tengo esto en un campo mysql en json
{"dia":"1","usuarios":{"id":"5","nombre":"juan"}}

y para hacer una busqueda hago esto con un select
"SELECT * FROM products WHERE JSON_CONTAINS(variant,JSON_OBJECT('dia','1'))"

que realiza una busqueda en valores de primer nivel (dia) ¿Alguien sabe como hacer para buscar en segundo nivel por ejemplo en id?
 
A mí esto me ha funcionado:

SELECT * FROM prueba1 WHERE JSON_EXTRACT(field1, '$.usuarios.id') = '5';

Creando una tabla llamada prueba1 con un campo field1 de tipo varchar con el JSON que has mostrado.

Insertar CODE, HTML o PHP:
mysql> SELECT * FROM prueba1 WHERE JSON_EXTRACT(field1, '$.usuarios.id') = '5';
+----------------------------------------------------+
| field1                                             |
+----------------------------------------------------+
| {"dia":"1","usuarios":{"id":"5","nombre":"juan" }} |
+----------------------------------------------------+
1 row in set (0,00 sec)

Debes tener cuidado con eso de guardar un campo con múltiples datos (en este caso un JSON) Si vas a usar ese campo para consultas SQL, puede que a la largar tengas muchas dificultades. Utiliza JSON en un campo sólo si ese dato va a ser extraído por otro software y tratado por él.
 
Personalmente nunca he trabajado con JSON directamente a MySQL, he utilizado alguna capa para realizar esa manipulación. Comparto opinión con [MENTION=189832]devop[/MENTION] deberías de integrar algún software de capa intermedia.
 
Atrás
Arriba