У меня большой набор данных 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 над этими данными, поэтому я также могу использовать красноречивый подход.

Заранее спасибо

0
salvob 20 Авг 2018 в 15:43

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.

Надеюсь, это поможет вам прийти к решению.

0
Sahith Vibudhi 20 Авг 2018 в 14:03

Пожалуйста, обратитесь к https://dev.mysql.com/doc/ RefMan / 8,0 / о / JSON - поиск - functions.html

Который позволяет вам искать конкретное значение в определенном месте структуры JSON.

Тем не менее, я бы предложил - если данные СЕЙЧАС должны быть доступны для поиска - перепроектировать / преобразовать данные.

0
Jan Myszkier 20 Авг 2018 в 12:51

Запросить JSON как строку можно с помощью операторов LIKE или REGEXP. Но в целом, поскольку строки длинные и сложные, на самом деле это не рекомендуется.

Лучший способ - перегрузить информацию в соответствующие таблицы и сохранить их в виде SQL.

Если у вас версия MySQL 5.7 или выше, вы можете попробовать некоторые опции с поддержкой JSON:

https://dev.mysql.com/doc/refman/8.0/en/json.html#json-paths

0
Guy Louzon 20 Авг 2018 в 12:55

Спасибо за предложения по использованию специфичных для MySQL функций json, столбец уже в JSON-типе, поэтому я могу окончательно использовать thm, но, к сожалению, даже после прочтения документации mysql я не могу понять, как решить мою проблему, честно говоря, я Я не специалист по данным, я немного сбит с толку при работе с базой данных, поэтому любые примеры будут оценены.

До сих пор я пытался запутаться в запросах, но мне не удалось найти правильный «селектор» для ключей моего набора данных. Использование «$ [0]» вернет только первый столбец, мне нужно некоторые советы по созданию правильного синтаксиса с использованием json_extract, json_contains и т. д.

0
salvob 20 Авг 2018 в 13:40

Спасибо всем, в конце я решил получить все данные и снова правильно их сохранить.

0
salvob 21 Авг 2018 в 09:09
51931021