Busca em campos MySQL com JSON de vários níveis

  • Autor Autor jerber
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
J

jerber

Alfa
Usuário com poucas negociações! Use sempre o saldo do 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?
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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.

Inserir CODE, HTML ou 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.
 
Voltar
Topo