1

我已经研究了我的问题的答案两天了,但我没有任何运气,可能是因为我不知道如何准确地描述我在寻找什么,就我需要使用的方法而言。

基本上在我的数据库中,我有两个表,一个名为 tblCounties(ID,County_vc),另一个名为 tblOrganizations(ID,Organization_vc)。我有第三张表将两者联系在一起,称为 jnCountyOrg (Org_fk_id, County_fk_id)。一个组织至少可以属于一个县,最多可以属于三个县。当我使用 php 对我的选择查询进行 while 循环时,它会正确地回显结果,如下所示:

县名1县名2县名3

我尝试过使用 mysql_fetch_array 和 mysql_fetch_assoc。

我希望结果的格式是这样的。

如果只有一个县与组织相关联,则回显“xxx 县”。

如果两个县与组织关联,则回显“xxx 和 xxx 县”。

最后,如果三个县(最大值)与组织相关联,则为“xxx、xxx 和 xxx 县”。

我很困惑是否要使用 CASE 语句在 SQL 中执行此操作,或者我是否应该在从数据库查询结果后使用 php 以这种方式格式化我的结果。任何帮助将不胜感激。

4

1 回答 1

1

这是一个SQLFiddle 示例。它也适用于县计数 > 3:

select id,CompanyNAme,countyCount,countyNAmes,
if(countyCount=1,concat(countyNAmes,' County'),
   if(countyCount=2,concat(REPLACE(countyNAmes,', ',' and '),' Counties'),

         CONCAT(SUBSTRING_INDEX(countyNAmes,',',countyCount-1)
            ,' and '
            , SUBSTRING_INDEX(countyNAmes,',',-1)
            ,'  Counties'
            )
      )
) RESULT
from
(
select o.id,max(o.Organization_vc) CompanyNAme,
group_concat(c.County_vc separator ', ') CountyNames,count(c.id) CountyCount 

from tblOrganizations o
left join jnCountyOrg co on (o.id=co.Org_fk_id) 
left join tblCounties c on (co.County_fk_id = c.id)
group by o.id
) m
order by m.id
于 2012-08-14T13:27:02.047 回答