我的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等
关于如何从数据库数组字段中找到一个或多个值的想法,请?
谢谢!
答案 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");'
请注意,这些方法都不能在表上使用索引。将数组存储在数据库列中通常是一个坏主意,您应该将它们作为单独的行存储在多对多表中。