我有3张桌子:
我需要做的是抓住一个城镇,例如Brimingham并列在一个阵列中,哪些类别的业务使用我们的主要公司表,所以我们没有任何类别存储在阵列中没有业务的Brimingham。
我遇到的问题是存储的数组大小,当我用序列化数组填充所有城镇时,我甚至无法打开表格进行浏览。见下面的数组示例:
a:9:{s:8:“法警”; s:1:“1”; s:20:“商务顾问”; s:1:“1”; s:25:“汽车车库和力学“; 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”;}
有人可以建议替代解决方案吗?
干杯
答案 0 :(得分:8)
我建议采用完全不同的方法来完全消除存储问题,并且应该让您的应用更有效率。存储序列化数组,其中包含可以从您的数据库中检索的信息,这是多余的,效率极低。这里最好的方法是规范化您的数据。
您应该创建第四个表,可能称为“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]
现在您可以遍历搜索结果,并且您将拥有该区域的所有类别。