MySQL在数据库阵列字段中搜索值(整数或字符串)

时间:2017-08-01 20:51:20

标签: mysql arrays

我的MySQL数据库中有两个是数组的字段。数据类型显示为LONGTEXT,注释为(DC2Type:array)。

例如,存储在此字段中的整数值如下所示:
a:4:{i:0;i:9;i:1;i:10;i:2;i:11;i:3;i:12;}

String值如下所示:
a:2:{i:0;s:6:"Value1";i:1;s:6:"Value2";}

我需要这样的字段,因此我可以存储可过滤的列。例如。第一个可能是年龄组,因此年龄为9,10,11,12。

我的查询必须获得所有与10岁相关的记录,或者在某些情况下说我想找到10和11的记录。

我尝试过IN和FIND_IN_SET语法,但都没有返回任何结果。

使用IN

SELECT * 
FROM table_name
WHERE MyField IN (10)

使用FIND_IN_SET

SELECT * 
FROM table_name
WHERE FIND_IN_SET(MyField,'Value1') > 0;

我知道数组可能不是存储值的最佳字段,但我不希望每个AgeGroup都有单独的字段,例如Age1,Age2等或每个类别,例如Value1,Value2等

关于如何从数据库数组字段中找到一个或多个值的想法,请?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用模式匹配。

整数:

WHERE MyField LIKE '%i:10;%'

字符串:

WHERE MyField LIKE '%s:6:"Value1";%'

6必须替换为您要搜索的字符串的长度。

如果要搜索多个数字或字符串,可以使用带有替换的正则表达式:

WHERE MyField RLIKE 'i:(10|11);'

WHERE MyField RLIKE 's:(6:"Value1"|10:"LongValue2");'

请注意,这些方法都不能在表上使用索引。将数组存储在数据库列中通常是一个坏主意,您应该将它们作为单独的行存储在多对多表中。