使用REGEX从MySQL中选择序列化值

时间:2017-03-03 15:40:25

标签: php mysql sql select subquery

我在MySQL DB中有一个名为 details 的序列化字段,如下所示:

a:4:{s:9:"bootstrap";s:14:"Boostrap_3.3.x";s:7:"layouts";s:10:"Responsive";s:13:"preprocessors";s:0:"";s:8:"browsers";s:117:"Latest_Chrome,Latest_Firefox,Latest_Safari,Internet_Explorer_11,Internet_Explorer_10,Internet_Explorer_9,Latest_Opera";}

我正在尝试检索包含 Bootstrap_3.x

的值的记录

我已经能够根据密钥检索详细信息字段数据:bootstrap包含以下内容:

SELECT details as bootstrap_version FROM product_info WHERE details LIKE '%bootstrap%'

此查询返回所有具有名为bootstrap的字段的记录。

为了选择包含Bootstrap_3.x的值,我需要更改哪些内容?

任何帮助都将不胜感激。

绞纱, -Paul

2 个答案:

答案 0 :(得分:0)

在MySQL中,您可以在查询中使用正则表达式:

SELECT details as bootstrap_version FROM product_info
WHERE details REGEXP 'bootstrap";s:\\d+:"Bootstrap_3\.x'

但是,如果您计划更频繁地使用此信息进行搜索,我建议将其放在您可以索引的另一列中 - 查询中的regexp非常慢。

在文档中阅读更多内容:https://dev.mysql.com/doc/refman/5.7/en/regexp.html

答案 1 :(得分:0)

您应该使用REGEXP:

SELECT details AS bootstrap_version FROM product_info WHERE details REGEXP 'Boostrap_3(\\.[0-9]+)+'