【问题标题】:How to apply search filter on serialized data in MYSQL如何在 MYSQL 中对序列化数据应用搜索过滤器
【发布时间】:2018-02-06 08:35:08
【问题描述】:

我的数据库表中有以下序列化数据。

我想搜索“键名”:“%value%”。我有以下格式的序列化数据。

我的序列化数据

a:31:{s:10:"contact_no";s:11:"1234-123456";s:13:"guardian_name";s:11:"Atif, Ashif";s:7:"program";s:10:"Essex SCHS";s:15:"sub_coordinator";s:3:"abc";s:7:"daycare";s:3:"abc";s:18:"daycare_contact_no";s:10:"9013256590";s:14:"daycare_tel_no";s:11:"1234-123456";s:9:"specialty";s:3:"abc";s:7:"address";s:3:"abc";s:4:"city";s:3:"abc";s:5:"state";s:2:"MT";s:8:"zip_code";s:6:"123456";s:8:"phone_no";s:10:"9033153594";s:8:"extra_no";s:10:"1234567890";s:9:"mobile_no";s:10:"9033153594";s:13:"contact_notes";s:3:"abc";s:8:"email_id";s:15:"abc@example.com";s:6:"fax_no";s:10:"1234567890";s:9:"id_number";s:3:"123";s:16:"service_provided";s:3:"abc";s:12:"case_manager";s:3:"308";s:18:"additonal_language";s:3:"abc";s:3:"sex";s:4:"male";s:10:"birth_date";s:10:"01/24/2018";s:17:"initial_isfp_date";s:10:"12/27/2017";s:13:"isfp_received";s:10:"12/12/2017";s:9:"isfp_date";s:10:"12/27/2017";s:11:"assign_date";s:10:"12/27/2017";s:10:"fvc_due_by";s:10:"12/19/2017";s:14:"email_approval";s:2:"no";s:9:"id_status";s:6:"active";}

我已经为此尝试了以下查询,但没有成功。

我尝试过的查询,

SELECT * FROM ta_children c
JOIN ta_children_meta cm ON c.id = cm.child_id 
WHERE cm.child_data like '%atif%' AND cm.child_data like '%guardian_name%'

在查询中 guardian_name 是键和 %atif% 搜索值。这是单一的,但它可能是动态的。所以,请回答这个动态搜索。

必填:如何用键值对实现对我的序列化数据的搜索。

谁能帮我解决这个问题?

【问题讨论】:

  • 这就是为什么你应该标准化你的数据库。
  • 好的,但是对于这种情况。你有什么解决办法吗?
  • 不,要获得可靠的解决方案,您需要解析序列化数据,并且 mysql 无法反序列化由 php 的 serialize() 生成的字符串。
  • 由于对每条记录进行序列化和过滤,这将提高页面速度。

标签: php mysql serialization


【解决方案1】:

您可能需要为此使用REGEXP 正则表达式:

SELECT * FROM ta_children c
JOIN ta_children_meta cm ON c.id = cm.child_id 
WHERE cm.child_data  REGEXP '.*"array_key";s:[0-9]+:".*array_value.*".*'

【讨论】:

  • 感谢您的回复。但它没有给出正确的结果。
猜你喜欢
  • 1970-01-01
  • 2020-03-13
  • 2018-03-21
  • 1970-01-01
  • 2017-05-18
  • 2012-05-17
  • 2014-04-04
  • 2019-06-21
  • 2014-05-06
相关资源
最近更新 更多