我有三张桌子:
有1500个城镇的
表。。
我需要做的是抓取一个城镇,例如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”;}
有人能提出另一种解决方案吗?
干杯
发布于 2009-07-19 23:40:26
我建议一种完全不同的方法,完全消除存储问题,并使你的应用程序更有效率。存储大量可以从数据库中检索到的信息的序列化数组是多余的,而且效率很低。这里最好的方法是将数据规范化。
您应该创建第四个表,可能称为'region_categories
',它将是一个简单的查找表:
CREATE TABLE region_categories (
regionId int unsigned not null,
categoryId int unsigned not null,
PRIMARY KEY(regionId,categoryId)
);
现在,与其将所有内容保存到一个数组中,不如为每个城镇/区域填充这个表中的类别。您的数据大小非常小,因为您所存储的只是一对is。
当需要检索给定区域的类别时,只需运行一个简单的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]
现在您可以迭代您的结果,您将得到该区域的所有类别。
https://stackoverflow.com/questions/1130434
复制相似问题