我有3个表:
我需要做的是抓住一个城镇,例如Brimingham并列在一个阵列中,哪些类别的企业使用我们的主要公司表,所以我们没有任何类别存储在阵列中没有业务的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";}
有谁能建议替代解决方案?
干杯
我建议采用一种完全不同的方法来完全消除存储问题,并且应该使您的应用程序更有效率.存储序列化数组,其中包含可以从您的数据库中检索的信息,这是多余的,效率极低.这里最好的方法是规范化您的数据.
您应该创建第四个表,可能称为' 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)
现在,您可以遍历结果,并且您将拥有该区域的所有类别.
| 归档时间: |
|
| 查看次数: |
2220 次 |
| 最近记录: |