【问题标题】:sql - Companies which serve specific statesql - 服务于特定州的公司
【发布时间】: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 是的。任何时候您可以对以下问题回答“是”:此对象是否可以同时为该字段具有多个值?那么您应该将该数据填充到子表中。

标签: php mysql sql database


【解决方案1】:

您可以使用 group by 来获取城市列表和 number_of_companies 服务,但这不会给出 () 中的公司。

Select city, count(*) as 'Number of companies serve'
from some_table
group by state

您的表格假设所有公司都服务于所在州内的一个城市。 也不可能列出所有服务于一个城市的公司,因为该信息不在您的表格中,除非您假设一家公司服务于其 OtherRegions 中的所有城市?

【讨论】:

  • 是的,如果一家公司服务于其他州,=服务于该州的所有城市
  • 在这种情况下,我会建议,正如其他人所提到的,创建另一个带有 ID 和服务区域的表。就目前而言,没有任何内容说 CA 包括 San Fran 和 LA 或 NY 包括 NY 和 Buffalo,因此这些不能包括在计数中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2019-07-06
  • 2016-09-28
  • 1970-01-01
  • 2011-02-15
相关资源
最近更新 更多