在我的MySql播放器表中,我有一个名为achievements
的列,它是一个文本字段,在此特定行中具有此值:
[
{
"value":11,
"globalID":23000000
},
{
"value":11,
"globalID":23000001
},
{
"value":11,
"globalID":23000002
},
...
{
"value":6044730,
"globalID":23000065
}
]
在数组底部附近,您可以看到此对象:
{
"value":48,
"globalID":23000062
},
我需要能够解析值字段并将其显示为warhero
字段。但是我怎么能这样做呢? globalID将保持不变,但值会发生变化。因为globalID位于value
值之后,我无法使用此帖中使用的内容:https://stackoverflow.com/a/21596032/4942382
我需要运行什么SQL查询来获取该值?
谢谢!
答案 0 :(得分:1)
你应该从未在表中保存JSON
,你已经破坏了关系数据库设计的规则。
mysql
无法理解数据,因此没有SQL查询可以帮助您,您有两个选择:
答案 1 :(得分:0)
如果表中的非原子值存储在单个列中,则表的设计甚至不满足第一个规范化级别,这种类型的JSON
编码值就是这种情况。
现在,如果您无权访问JSON
函数available to MySql version 5.7+,并且您的 globalID 具有固定的位数,那么您可以执行以下字符串匹配。
例如,如果您需要与 globalID 23000062一起使用的值,那么您可以这样做:
SELECT players.*,
CAST(
SUBSTRING_INDEX(
SUBSTRING_INDEX(achievements, '"globalID":23000062', 1),
'"value":',
-1
)
AS UNSIGNED) AS json_extracted_value
FROM players
WHERE INSTR(achievements, '"globalID":23000062') > 0
但实际上,您应该认真考虑重新设计数据库。