搜索存储在MySql中的低谷JSON数据

时间:2018-08-20 12:43:05

标签: mysql json

我在数据库中有大量的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"]}
}

我应该在db中查询以验证哪些记录具有哪个属性(即,所有带有“ Release”键的记录,所有包含Developoer键中包含“ Capcom”值的记录,等等)

有人可以指出我正确的方法吗?我只发现了具有简单结构的示例(即{“ key”:“ value”}),这里的键是索引号,而值是具有两个不同键的数组...

我应该找到一种方法来重写所有数据还是有一些简单的方法?

p.s。我正在基于这些数据构建一个laravel应用程序,因此我也可以使用一种雄辩的方法。

预先感谢

5 个答案:

答案 0 :(得分:0)

请参阅 https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html

它使您可以在JSON结构的特定位置搜索特定值。

但是,我建议-如果现在应该可以搜索数据,请重新设计/转换数据。

答案 1 :(得分:0)

使用LIKE或REGEXP运算符可以将JSON查询为字符串 但是总的来说,由于字符串很长很复杂,因此我们不建议

最好的方法是将信息重新加载到适当的表中,以SQL方式存储

如果您的MySQL版本是5.7或更高版本,则可以尝试一些支持JSON的选项:

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

答案 2 :(得分:0)

感谢有关使用mysql json特定功能的建议,该列已经为JSON类型,因此我可以确定地使用thm,但是不幸的是,即使在阅读mysql文档后,我也无法弄清楚如何解决我的问题我不是数据专家,我在处理数据库时有点困惑,所以任何示例都将不胜感激。

到目前为止,我试图弄乱查询,但是我无法为数据集的键找到正确的“选择器”,使用“ $ [0]”将仅返回第一列,需要一些使用json_extract,json_contains等创建正确语法的提示。

答案 3 :(得分:0)

正如@Guy L在回答中提到的那样,您可以使用LIKE或REGEX。但是,这会很昂贵。

示例:

 SELECT * FROM table WHERE json_column LIKE '%"Release"%';

回答:

  

我应该找到一种方法来重写所有数据还是有一些简单的方法?

考虑一下,您必须多久访问一次这些数据?

像MongoDB这样的NoSQL数据库对于此类数据来说是一个非常好的用例,我一直在使用Mongo,对此我感到满意。

您可以轻松地将数据迁移到MongoDB,并使用类似于Eloquent模型的ORM,例如:https://github.com/jenssegers/laravel-mongodb与laravel项目中的mongo通信。

希望它可以帮助您找到解决方案。

答案 4 :(得分:0)

谢谢大家,最后我决定获取所有数据并再次正确存储它们。