我有一个带有字符串列的MySQL表,
ID String
----- -----------------------------------------
1 {"Type":"new", "Node":"{Status=New, Properties=[{PropertyValue=Samp, PropertyRefernceTypeID=1, PropertyTypeID=26}, {PropertyValue=25, PropertyRefernceTypeID=1, PropertyTypeID=33}]}"}
2 {Type":"new", "Node":"{Status=New, Properties=[{PropertyValue=25, PropertyRefernceTypeID=1, PropertyTypeID=33}, {PropertyValue=168-3, PropertyRefernceTypeID=1, PropertyTypeID=103}]}"}
现在我如何在MySQL select Query中只选择PropertyValue
PropertyTypeID=33
?只有当所有字符串的长度相等时才可以使用substring()
方法,但在我的情况下,长度可能因不同的ID而异。
答案 0 :(得分:0)
这就是为什么在数据库字段中存储JSON,序列化数组/对象或只是多个值被认为是不好的做法,除非由于某种原因你内部不需要任何东西。
该字段应始终是原子的。您应该遵循数据库规范化准则。
因此,您的数据库应该是这样的:
ID | PropertyValue | PropertyReferenceTypeID | ProductTypeID
然后你永远不会遇到这个问题,你只需SELECT PropertyValue FROM Properties WHERE ID=1
但是现在,为了避免这种麻烦,如果您使用的是app语言,只需获取字符串并对其进行解码即可。例如,在PHP中:
$array = json_decode($str);
$PropertyValue = $arr['Node']['Properties']['PropertyValue'];
P.S。你的json在嵌套时仍然没有完全有效。