我如何从mysql数据库中的序列化字段中搜索?

Sou*_*sak 8 php mysql sql serialization

我如何从mysql数据库中的序列化字段搜索除mysql之外的语句?

数据是:

a:9:{s:2:"m1";s:4:"1217";s:2:"m2";s:8:"9986-961";s:2:"m3";s:19:"1988-03-07 00:00:00";s:2:"m4";s:0:"";s:2:"m5";s:0:"";s:2:"m6";s:0:"";s:2:"m7";s:3:"104";s:2:"m8";s:6:"150000";s :2:"m9";s:18:"Ok Then, Yes It Is";}
Run Code Online (Sandbox Code Playgroud)

我需要m9值为'Yes It Is'的行.我不想使用mysql'like'语句.

我试过了:

SELECT * FROM table WHERE field like '%Yes It Is%'
Run Code Online (Sandbox Code Playgroud)

你能帮忙吗?

Sou*_*sak 15

我找到了一个使用正则表达式的解决方案

SELECT *
FROM table_name
WHERE `field` REGEXP '.*"array_key";s:[0-9]+:".*array_value.*".*'

SELECT *
FROM table_name
WHERE `field` REGEXP '.*"m9";s:[0-9]+:".*Ok Then, Yes It Is.*".*'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助:

http://www.namasteui.com/search-from-serialize-field-in-mysql-database/

  • 好的,它比使用LIKE运算符更好? (2认同)
  • 你的正则表达式是无成本的吗?也许你应该看看http://stackoverflow.com/questions/2740006/mysql-regexp-performance-question (2认同)

Mar*_*łek 5

您是否尝试过以下方法:

SELECT * FROM table WHERE field like '%"m9";s:18:"Ok Then, Yes It Is";%'
Run Code Online (Sandbox Code Playgroud)

但事实上,如果你想搜索这些数据,你应该简单地创建表的正确结构,而不是将所有序列化数据放在一列中