У меня большой набор данных json внутри базы данных, данные не должны были запрашиваться, поэтому они хранились очень грязно ... это структура
{
"0": {"key": "Developer(s)", "values": ["Capcom"]},
"1": {"key": "Publisher(s)", "values": ["Capcom"]},
"2": {"key": "Producer(s)", "values": ["Tokuro Fujiwara"]},
"3": {"key": "Composer(s)", "values": ["Setsuo Yamamoto"]},
"4": {"key": "Series", "values": ["X-Men"]},
"6": {"key": "Release", "values": ["EU:", " 1995"]},
"7": {"key": "Mode(s)", "values": ["Single-player"]}
}
Я должен запросить внутри БД, чтобы проверить, какие записи имеют какое свойство (то есть все записи с ключом «Release» внутри, все, что содержит значение «Capcom» внутри ключа Developoer и т. Д.)
Может ли кто-нибудь указать мне правильный путь? Я нашел только примеры с простыми структурами (т.е. {"ключ": "значение"}), здесь ключ - это номер индекса, а значение - это массив с двумя разными ключами ...
Должен ли я найти способ переписать все данные или есть что-то простое?
Постскриптум Я строю приложение laravel над этими данными, поэтому я также могу использовать красноречивый подход.
Заранее спасибо
5 ответов
Как @Guy L упомянул в своем ответе, вы можете использовать LIKE или REGEX. Но это будет дорого.
Пример:
SELECT * FROM table WHERE json_column LIKE '%"Release"%';
Отвечая:
Должен ли я найти способ переписать все данные или есть что-то простое?
Подумайте, как часто у вас есть доступ к этим данным?
База данных NoSQL, такая как MongoDB, является действительно хорошим примером использования таких данных, я использовал Mongo и доволен этим.
Вы можете легко перенести свои данные в MongoDB и использовать ORM, аналогичный модели Eloquent, например: https: // github. com / jenssegers / laravel-mongodb, чтобы общаться с Монго из вашего проекта laravel.
Надеюсь, это поможет вам прийти к решению.
Пожалуйста, обратитесь к https://dev.mysql.com/doc/ RefMan / 8,0 / о / JSON - поиск - functions.html
Который позволяет вам искать конкретное значение в определенном месте структуры JSON.
Тем не менее, я бы предложил - если данные СЕЙЧАС должны быть доступны для поиска - перепроектировать / преобразовать данные.
Запросить JSON как строку можно с помощью операторов LIKE или REGEXP. Но в целом, поскольку строки длинные и сложные, на самом деле это не рекомендуется.
Лучший способ - перегрузить информацию в соответствующие таблицы и сохранить их в виде SQL.
Если у вас версия MySQL 5.7 или выше, вы можете попробовать некоторые опции с поддержкой JSON:
https://dev.mysql.com/doc/refman/8.0/en/json.html#json-paths
Спасибо за предложения по использованию специфичных для MySQL функций json, столбец уже в JSON-типе, поэтому я могу окончательно использовать thm, но, к сожалению, даже после прочтения документации mysql я не могу понять, как решить мою проблему, честно говоря, я Я не специалист по данным, я немного сбит с толку при работе с базой данных, поэтому любые примеры будут оценены.
До сих пор я пытался запутаться в запросах, но мне не удалось найти правильный «селектор» для ключей моего набора данных. Использование «$ [0]» вернет только первый столбец, мне нужно некоторые советы по созданию правильного синтаксиса с использованием json_extract, json_contains и т. д.
Спасибо всем, в конце я решил получить все данные и снова правильно их сохранить.
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.