Запрос MySQL для поиска поля со строкой JSON
это может быть достаточно просто с базовым SQL или может потребоваться регулярное выражение, но я попал в кирпичную стену.
мои данные хранятся в строке JSON, как эти два примера (каждый в 1 поле):
[{"id":"2","value":["1","3"]},{"id":"3","value":["1","2"]}]
и:
[{"id":"3","value":["2"]},{"id":"3","value":["1","2","5"]}]
Я хочу искать значения между этими последними скобками, которые могут состоять из многих чисел ["1","2","5"] or just a single on ["2"]
. Начальные номера соответствуют 2 категориям-одиночным "id":"2"
и "id":"3"
.
используя %"2"%
С простым Как будто, конечно, все совпадает. Я могу запросить по "id":"$var"
чтобы вернуть каждую категорию, затем используйте PHP для фильтрации после получения результатов, но данные могут быть довольно большими, и я уверен, что это легко для гуру SQL.
у меня нет возможности изменить формат поля, он должен оставаться как JSON.
любая помощь приветствуется! Спасибо.
2 ответов
Я думаю, что решил его, используя это:AND extra_fields REGEXP '(.*"id":"2".*)("\[.*"1".*\]")'
. Это больше связано с регулярными выражениями, чем с MySQL :P
комментировать: (я не смог найти кнопку "комментарий")
Этот синтаксис становится яснее, когда вы узнаете, что "extra_fields" - это имя столбца в таблице
в SQL это очень просто, потому что вам нужно только определить последнюю открывающую скобку. Это можно сделать с помощью индекса подстроки.
возможно, ваша таблица называется test, а ваше поле со строкой text - это должно работать
select text from (select substring_index(text,'[',-1) as text from test) as new where text like '%5%'**
Если у вас есть текст между 2 уникальными разделителями, возможно, вы найдете в этом уроке полезны