【问题标题】:PHP/Mysql: Searching serialized data for a string [duplicate]PHP / Mysql:搜索字符串的序列化数据[重复]
【发布时间】:2015-12-23 18:48:24
【问题描述】:

我已经开始从事其他人创建的项目,这就是他所做的:
在一个 mySql 表中,他有一个名为“allData”的 TEXT 字段,在该字段中,他序列化了如下所示的记录

a:13:{s:12:"currencyCode";s:3:"SEK";s:11:"senderEmail";s:18:”xxxxxgu7@gmail.com";
s:4:"HASH";s:32:"ebdeb85d094cefd102b630fa9e69d9ca";}

(还有很多数据,但我将其减少了大约 95%,这样它就不会弄乱这个页面)

知道如何在上述数据中搜索 senderEmail 或 HASH 吗?

【问题讨论】:

  • 您是要从多行中搜索电子邮件,还是只需要从一行中提取数据? @瑞安
  • O 会考虑更改表结构,为每个信息创建一个文件
  • 如果你想在数据库中搜索那些特定的字段,从长远来看,你最好将它们存储在它们自己的适当列中(也许除了序列化数据之外,虽然那会取决于整体设计。)否则你最终会得到not-entirely-great kludges。当然,任何其他方式都会更慢,尤其是对于其中包含大量数据的 TEXT 字段。
  • 如果只有一行就没有问题了,有几百行:(

标签: php mysql sql search serialization


【解决方案1】:
SELECT * FROM table WHERE allData LIKE '%"xxxxxgu7@gmail.com"%' AND allData LIKE '%"ebdeb85d094cefd102b630fa9e69d9ca"%' LIMIT 1;;

此示例应允许您在表中搜索特定的 HASH 和 senderEmail,如果序列化数据中存在这两个字段的匹配项,则返回该条目。这对于放入视图很有用,以便可以快速轻松地检索它,并且您当然可以看到要在查询中更改电子邮件和哈希的位置。在此示例中,它将返回该确切条目。

更多信息:

MySQL Like Function

Search inside serialize data with MYSQL

【讨论】:

  • 如果只有一行就没有问题,有几百行:(
  • @Ryan 您是在寻找特定的电子邮件还是只想要其中包含该模式的条目?
  • 特定的电子邮件或哈希。
  • 那么让我为你修改我的答案。
  • 谢谢,选择了你的答案 :) 我想我会尝试将其转换为普通字段,但这似乎很痛苦......有什么建议吗?
【解决方案2】:

您可以正常检索数据。然后,使用unserialize 将其变成一个可以搜索的数组。

【讨论】:

  • 反对票有什么解释吗?
  • 不是我的反对意见,而是:如果你这样做,你就不需要(关系)数据库,因为无论如何你都会将所有数据“传输”到 php 实例中。
  • 有数百行,并且几乎每天都在添加新行……只需查找一次就需要很长时间,不是吗?
猜你喜欢
  • 2020-03-13
  • 2018-03-29
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
相关资源
最近更新 更多