2015-09-25 49 views
0

我已經開始了一個其他人創建的項目,這是他所做的:
在mySql表中他有一個名爲「allData」的TEXT字段,現場他看起來像這樣PHP/Mysql:搜索字符串的序列化數據

a:13:{s:12:"currencyCode";s:3:"SEK";s:11:"senderEmail";s:18:」[email protected]"; 
s:4:"HASH";s:32:"ebdeb85d094cefd102b630fa9e69d9ca";} 

系列化記錄(還有很多更多的數據,但我把它砍倒了約95%,因此它不會弄亂此頁)

任何想法如何,我可以搜索以上數據爲senderEmail或HASH?

+0

你們是不是要搜索出多行的電子郵件或者你只需​​要提取一行數據? @Ryan – SalientGreen

+0

O會考慮更改表格結構,以便爲每個信息提供一個字段 –

+1

如果要搜索數據庫中的這些特定字段,最好從長遠角度將它們存儲在其自己的專欄中(可能除了序列化的數據,儘管這將取決於整體設計。)否則,你會最終與[不完全偉大的kludges](http://stackoverflow.com/questions/24508164/how-do-i - 搜索 - 從序列化視野,在MySQL的數據庫)。當然,其他任何方式都會變慢,尤其是對於包含大量數據的TEXT字段。 –

回答

2
SELECT * FROM table WHERE allData LIKE '%"[email protected]"%' AND allData LIKE '%"ebdeb85d094cefd102b630fa9e69d9ca"%' LIMIT 1;; 

這個例子應該讓你搜索在表中特定HASH和SENDEREMAIL,如果這兩個領域的匹配在序列化的數據存在返回該條目。這對放入視圖非常有用,以便快速輕鬆地檢索它,並且您當然可以查看您希望在查詢中更改電子郵件和散列的位置。在這個例子中,它將返回確切的條目。

的更多信息:

MySQL Like Function

Search inside serialize data with MYSQL

+0

如果它只是一行它不會是一個問題,有幾百行:( – Ryan

+0

@Ryan你要找一個特定的電子郵件,或者你只是想在該模式的條目嗎? –

+0

具體的電子郵件或散列 – Ryan

0

您可以正常檢索數據。然後,使用unserialize將其轉換爲您可以搜索的數組。

+0

downvote的任何解釋? –

+0

不是我的倒票,但:如果你這樣做,你不需要(關係)數據庫,因爲您將所有數據「轉換」爲「php」實例 – VolkerK

+1

有幾百行,並且幾乎每天都會添加新行......只需要一次查找就會花費很長時間,是不是? – Ryan