2015-09-25 83 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