Php 使用内部联接显示多个结果
我有以下三个MySQL表: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
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;