Mysql存储序列化数组

Joh*_*nes 4 mysql

我有3个表:

  1. 地区表中有1500个城镇.
  2. 分类表有1800个类别.
  3. 公司表包含业务.

我需要做的是抓住一个城镇,例如Br​​imingham并列在一个阵列中,哪些类别的企业使用我们的主要公司表,所以我们没有任何类别存储在阵列中没有业务的Brimingham.

我遇到的问题是存储的数组的大小,当我用序列化数组填充所有城镇时,我甚至无法打开表格进行浏览.见下面的数组示例:

a:9:{s:8:"法警"; s:1:"1"; s:20:"商务顾问"; s:1:"1"; s:25:"Car Garages and Mechanics"; s :1:"1"; s:35:"养殖牲畜和其他动物"; s:1:"2"; s:19:"时尚配饰"; s:1:"1"; s:6:"酒店"; s:1:"1"; s:20:"邮局服务"; s:1:"1"; s:13:"学校国家"; s:1:"1"; s:14:"木工匠"; s:1:"1";}

有谁能建议替代解决方案?

干杯

zom*_*bat 8

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

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

CREATE TABLE region_categories (
  regionId int unsigned not null,
  categoryId int unsigned not null,
  PRIMARY KEY(regionId,categoryId)
);
Run Code Online (Sandbox Code Playgroud)

现在,不是将所有内容保存到数组中,而是针对每个城镇/地区,您应该使用该城镇中的类别填充此表.您的数据量非常小,因为您存储的只是一对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]
Run Code Online (Sandbox Code Playgroud)

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