2014-04-08 51 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進行反序列化,然後在那裏進行搜索。但是,您可以使用上述技術來最大限度地減少您必須抽出/解析的字符串總數。