2014-04-08 46 views
1

旧系统中的前开发人员之一我正在使用PHP serialize()将一个数据数组平整为MySQL表的一列。在SQL中反序列化PHP数组

我需要编写一个涉及此列的复杂查询。是否有一种方法可以在SQL查询中反序列化数据(即使它是以逗号分隔的字符串),还是需要将结果传回给PHP?

+0

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html如果有任何帮助,你还需要使用PHP或你想爆炸逗号值? –

+0

以及它不可能,因为mysql不知道任何关于PHP serialize()所以你需要PHP来处理unserialize() –

回答

1

序列化的PHP数据只是一个字符串,因此对于“简单”搜索,您可以使用基本的MySQL字符串操作。

例如序列化阵列具有name参数,你需要来匹配这一点,所以

... WHERE LOCATE(CONCAT('s:', LENGTH('foo'), ':foo') ,serializeddatafield) > 0 

将产生

WHERE LOCATE('s:3:foo', serializeddata) > 0 

但随后,这会发现任何字符串,其值是foo在任何地方数据,而不一定在你想要的特定数组字段中。

例如你可能更擅长于整个领域,使用PHP进行反序列化,然后在那里进行搜索。但是,您可以使用上述技术来最大限度地减少您必须抽出/解析的字符串总数。