Bien, acabo de descubrir que puedes guardar y seleccionar el tipo de datos JSON en MySQL.
Traté de seguir la respuesta del usuario2458995 a una pregunta similar a la mía (la diferencia es mía es con una clave y el valor es una matriz) Copié su código exacto, creé la tabla, puse los datos de su inserción SQL y probé su selección, lo que me dio un error.
Modifiqué la tabla aquí para mostrar una muestra de cómo se almacenarán los datos en mi ejemplo.
Básicamente tengo esta configuración
CREATE TABLE my_table (id INT, data JSON);
INSERT INTO my_table VALUES (1, '{"hashtags": ["html", "php", "javascript"], "categories": [2,5,6]}'), (2, '{"hashtags": ["css", "jquery", "html"], "categories": [2,5,6]}')
Si quiero seleccionar todos los hashtags puedo hacerlo así
SELECT data->>"$.hashtags" FROM my_table
Pero, ¿cómo selecciono datos como en qué lugar?
Imaginé algo como esto
SELECT * FROM `my_table` WHERE 'html' IN (data->>"$.hashtags")
Se ejecuta, pero no devuelve filas. También probé varias otras formas sugeridas, pero no puedo hacer que nada funcione.
SELECT * FROM `my_table` WHERE JSON_CONTAINS('html', '$.hashtags')
Pensé que este sería un enfoque realmente bueno, pero ¿sería más inteligente almacenar cada categoría / hashtag en una fila única con una identificación de FK?
Espero que alguien pueda ayudarme aquí :)
Puede abordar esto con JSON_SEARCH()
, disponible en MySQL 5.7:
select *
from `my_table`
where json_search(data, 'one', 'html', null, '$.hashtags[*]') is not null
Explicación:
json_search(
data, -- json document to search
'one', -- the search terminates after the first match
'html', -- search string argument
null, -- escape character: none
'$.hashtags[*]' -- path to search: the json array under attribyte 'hashtag'
)
Demostración en MySQL 5.7 DB Fiddle :
select
t.*,
json_search(data, 'one', 'html', null, '$.hashtags[*]') matched_path
from `my_table` t
where json_search(data, 'one', 'html', null, '$.hashtags[*]') is not null;
| id | data | matched_path |
| --- | -------------------------------------------------------------------- | --------------- |
| 1 | {"hashtags": ["html", "php", "javascript"], "categories": [2, 5, 6]} | "$.hashtags[0]" |
| 2 | {"hashtags": ["css", "jquery", "html"], "categories": [2, 5, 6]} | "$.hashtags[2]" |
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras