假设该数组内容10个项目名称年龄为第二个项目,值为10 它在序列化后存储在mysql数组中
是否可以直接在序列化的mysql查询中更新该年龄 与这些步骤(一种方式可以是这个) 选择从数据库序列化数据 反序列化它 改变数组 然后再次序列化 然后更新
例如像这样序列化数据somhing
一个:23:{I:10000011;一个:5:{S:15: “social_users_id”; S:8: “10000022”; S:10: “friends_id”; S:8: “10000011”; S :8:“关系”; s:1:“1”; s:6:“status”; s:1:“0”; s:4:“html”; s:41:“Pradeep Kumar有更新个人资料图片。 “;} I:10000015;一个:5:{S:15:” social_users_id “; S:8:” 10000022 “; S:10:” friends_id “; S:8:” 10000015 “S:8:”关系“; s:1:”6“; s:6:”status“; s:1:”0“; s:4:”html“; s:41:”Pradeep Kumar有更新个人资料图片。“;} I:10000016;一个:5:{S:15: “social_users_id”; S:8: “10000022”; S:10: “friends_id”; S:8: “10000016”,S:8: “关系”; S :1:“3”; s:6:“status”; s:1:“0”; s:4:“html”; s:41:“Pradeep Kumar有更新个人资料图片。”;} i:10000018;一:5:
OR Array
[10000015] => Array
(
[social_users_id] => 10000022
[friends_id] => 10000015
[relation] => 6
[status] => 0
[html] => Pradeep Kumar has update profile picture.
)
[10000016] => Array
(
[social_users_id] => 10000022
[friends_id] => 10000016
[relation] => 3
[status] => 0
[html] => Pradeep Kumar has update profile picture.
)
我想选择并更新数组'10000015'的'status'索引 我使用了表格coloum的longtext数据类型。
我想首先搜索那个状态索引,然后在更新之后,我们可以使用查询或者我必须使用PHP代码...
它可以比那短吗? 如果我们只是想要更新一件事那里有很多浪费(无情的查询,更新)...特别是如果数组很大加 我们怎样才能在没有反序列化的情况下进行搜索?(可能吗?)
任何想法...... 谢谢
答案 0 :(得分:2)
据我所知,这是不可能的,这是在MySQL中使用数组的缺点(你需要一直序列化和反序列化数据)。
接下来我看到你的数组看起来一样,所以把它们放在表格中。
row => social_users_id|friends_id|relation|status|html
如果你想使用数组,你可以看看NoSQL。我使用mongodb取得了很大的成功。 NoSQL数据库的一个巨大缺点是您需要摆脱SQL思维模式。例如,你不能使用JOINS。
但是在MonoDB数组中支持并且“可查询”动态数据集的巨大优势
如果你真的想要它,你可以制作一个表array
和array_item
使用数组如下:
id|name
和array_item:
id|array_id|key|value
现在你可以说数组项我想要数组id x的值
但也有很多其他的东西
就像我想要键y和值需要x
的数组一样请注意,此数据集将超时并且难以阅读
答案 1 :(得分:1)
严格来说,当然可以更新数据库的任何行。重点是:这样做真的是个好主意吗?
不要忘记序列化遵循规则和规范。 s:15:"social_users_id"
表示 unserialize()函数将处理15个字符的字符串。这是一个例子,还有其他规则。
所以是的,严格来说,你可以更新你的序列化数组中的字符串,但你必须计算规范,因为你真的不想自己重写序列化程序,你肯定会迟早打破你的序列化弄乱你的数据。
无论如何,如果您想了解有关规格的更多详情,请查看these comments on the PHP manual。
另一点是,显然,如果您需要更新字段,则此字段必须作为字段存在,而不是作为子字符串存在。这是弱的数据库设计,这一点迟早会导致你陷入困境。
现在,如果你把两个缺点结合起来,那么......你猜; o)
答案 2 :(得分:0)
简短的回答是否定的,序列化的数据必须是非序列化的,然后进行编辑,然后重新序列化,除非你想运行像preg_replace();
那样相当密集处理的正则函数。
我的建议是将值分别存储在数据库中。