【发布时间】:2014-05-13 17:01:55
【问题描述】:
我有一张公司表(MySQL InnoDB),里面有各自的地址。一家公司为城市的客户服务。 有了这个,我包括一个列来设置公司可以服务的其他地区(州),以及其他列来设置公司是否服务于所有国家:
id State City Street Name OtherRegions serveCountry
----------------------------------------------------------------------------------------
1 CA Los Angeles Street Microsoft NULL NULL
2 NY New York Street2 Mercur chip CA NULL
3 NY Buffalo street3 apple inc NULL 1
4 TX Houston street4 Climp corp CA;NY NULL
5 CA San Francisco street5 Motorola NULL NULL
6 TX San Antonio street6 HP Inc. NULL NULL
7 CA San Francisco street7 sony NULL NULL
我的问题是:我如何才能获得特定州的城市以及为相应城市提供服务的公司数量?
预期结果:
加利福尼亚州
City Number of Companies serve
-----------------------------------------------------------
Los Angeles 4 (Microsoft, Mercur, Apple, Climp)
San Francisco 4 (Mercur, Apple, Climp, Motorola, Sony)
纽约州
City Number of Companies serve
-----------------------------------------------------------
New York 3 (Mercur, Apple, Climp)
Buffalo 2 (Apple, Climp)
我可以在同一个查询中执行此操作,还是必须在多个查询中执行此操作 (PHP)?
假设没有区域/子区域例外。
非常感谢!!
【问题讨论】:
-
这不是好的关系设计。 OtherRegions 应该是一个子表,其中包含公司服务的每个区域的记录。
-
为什么 Mercur 既属于旧金山又属于洛杉矶?
-
@NevilleK,因为 Mercur 服务于 CA 州...
-
@VikingBlooded 一个包含以下列的新表:companyID 和 region?
-
@brnmonteiro 是的。任何时候您可以对以下问题回答“是”:此对象是否可以同时为该字段具有多个值?那么您应该将该数据填充到子表中。