我在数据库中有大量的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应用程序,因此我也可以使用一种雄辩的方法。
预先感谢
答案 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)
谢谢大家,最后我决定获取所有数据并再次正确存储它们。