Php 使用内部联接显示多个结果

Php 使用内部联接显示多个结果,php,mysql,database,left-join,inner-join,Php,Mysql,Database,Left Join,Inner Join,我有以下三个MySQL表: companies services auxiliary id_company name_company id_service name_service id_company id_service 1 Google 1 Search 1 1 2

我有以下三个MySQL表:

companies                    services                      auxiliary
id_company name_company      id_service  name_service      id_company id_service   

1          Google            1           Search            1          1   
2          Yahoo             2           Calendar          1          2  
                             3           Mail              1          3
                             4           Maps              1          4
                                                           2          1
                                                           2          3
我想知道我是否可以只显示一个查询(我使用的是php):

现在我要做的是显示公司,对于每个公司,我都进行另一个MySQL查询来显示服务。只有一个查询就可以做到这一点吗?
谢谢。

你的问题的答案是:“是的”

哦,你也想知道怎么做。关键是将表连接在一起,然后在公司级别进行聚合。我将假设您确实希望输出为两列(公司名称、服务),而不是将它们连接在一起的一个字符串

SQL是:

select c.name_company, group_concat(s.name_service separator ', ') as services
from auxiliary a join
     companies c
     on a.id_company = c.id_company join
     services s
     on a.id_service =  s.id_service
group by c.id_company, c.name_company;

是的,你可以。虽然在我看来,你所描述的方法对我来说似乎更自然。 (一个查询/游标用于公司,另一个用于服务)

您可以使用一个查询来准备以下列表:
谷歌,搜索
谷歌,日历
谷歌,邮件
谷歌,地图
雅虎,搜索
雅虎,邮件

(为了简单起见,我省略了ID)

然后,您浏览列表,每次公司发生变化时,您都会开始一个新的结果行。我发现这比您描述的方法要复杂一些。

是的,这可能是一个很好的解决方案,但我简化了示例,因此我不能完全使用您提出的方法!谢谢:)
select c.name_company, group_concat(s.name_service separator ', ') as services
from auxiliary a join
     companies c
     on a.id_company = c.id_company join
     services s
     on a.id_service =  s.id_service
group by c.id_company, c.name_company;