WHERE FIND_IN_SET(1, JSON_UNQUOTE(JSON_EXTRACT(mycolumn, '$.parent[0].child'))) > 0esta consulta esta funcionando
WHERE FIND_IN_SET(1, JSON_UNQUOTE(JSON_EXTRACT(mycolumn, '$.parent[*].child'))) > 0esta consulta no funciona
pero cuando quiero poner * en lugar de 0, mi consulta no funciona. Quiero buscar clave en todas las posiciones. la primera consulta solo muestra "search key" igual a solo el primer (0) json
este es mi json en la columna mysql
{"parent":[ { "child":"1,3", "type":"" },{ "child":"36,41", "type":"1" },{ "child":"52", "type":"1" } ]}Puedes usar una solución como esta:
SELECT * FROM table_name WHERE FIND_IN_SET(1, REGEXP_REPLACE(JSON_EXTRACT(column_name, '$.parent[*].child'), '[\\[\\]\\" ]', '')) > 0 JSON_EXTRACT devuelve un valor único o una matriz JSON con todos los valores encontrados. La matriz JSON no es válida para usar en FIND_IN_SET . Primero debe eliminar [ , ] y " para obtener la lista separada por comas de todos los valores encontrados.
También puede usar JSON_SEARCH para resolver esto:
SELECT * FROM table_name WHERE JSON_SEARCH(column_name, 'one', '%,1,%', NULL, '$.parent[*].child') IS NOT NULL OR JSON_SEARCH(column_name, 'one', '1,%', NULL, '$.parent[*].child') IS NOT NULL OR JSON_SEARCH(column_name, 'one', '%,1', NULL, '$.parent[*].child') IS NOT NULL