我建议采用一种完全不同的方法来完全消除存储问题,并且应该使您的应用程序更有效率.存储序列化数组,其中包含可以从您的数据库中检索的信息,这是多余的,效率极低.这里最好的方法是规范化您的数据.

您应该创建第四个表,可能称为“region_categories”,它将是一个简单的查找表:

CREATE TABLE region_categories (
regionId int unsigned not null,
categoryId int unsigned not null,
PRIMARY KEY(regionId,categoryId)
);

现在,不是将所有内容保存到数组中,而是针对每个城镇/地区,您应该使用该城镇中的类别填充此表.您的数据量非常小,因为您存储的只是一对ID.

当需要检索给定区域的类别时,您只需运行一个简单的SELECT语句:

SELECT category.*
FROM region_categories AS rc LEFT JOIN categories AS c ON rc.categoryId=c.categoryId
WHERE rc.regionId=[whatever region you're dealing with]

现在,您可以遍历结果,并且您将拥有该区域的所有类别.