首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql存储序列化数组

Mysql存储序列化数组
EN

Stack Overflow用户
提问于 2009-07-15 09:47:39
回答 1查看 2.2K关注 0票数 4

我有三张桌子:

有1500个城镇的

  1. 区域表。
  2. 分类表,包含业务的1800个

表。。

我需要做的是抓取一个城镇,例如Brimingham和list在Array中,其中有业务使用我们的主要公司表,所以我们没有存储在数组中的任何类别在Brimingham没有业务。

我遇到的问题是存储的数组的大小,当我用序列化数组填充所有城镇时,我甚至不能打开表来浏览。请参见下面的数组示例:

A:9:{8:“法警”;s:1:“1”;s:20:“商业顾问”;s:1:“1”;s:25:“汽车修理厂和机械”;s:1:“1”;s:35:“养殖牲畜和其他动物”;s:1:“2”;S:19:“时尚Accessories";s:1:"1";s:6:"Hotels";s:1:"1";s:20:"Post Office Services";s:1:"1";S:13:“学校国家”;s:1:“1”;s:14:“木匠”;s:1:“1”;}

有人能提出另一种解决方案吗?

干杯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-19 23:40:26

我建议一种完全不同的方法,完全消除存储问题,并使你的应用程序更有效率。存储大量可以从数据库中检索到的信息的序列化数组是多余的,而且效率很低。这里最好的方法是将数据规范化。

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

代码语言:javascript
运行
复制
CREATE TABLE region_categories (
  regionId int unsigned not null,
  categoryId int unsigned not null,
  PRIMARY KEY(regionId,categoryId)
);

现在,与其将所有内容保存到一个数组中,不如为每个城镇/区域填充这个表中的类别。您的数据大小非常小,因为您所存储的只是一对is。

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

代码语言:javascript
运行
复制
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]

现在您可以迭代您的结果,您将得到该区域的所有类别。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1130434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档