1

私は 2 日間質問に対する答えを調査してきましたが、使用する必要がある方法に関しては、探しているものを正確に説明する方法がわからないため、運がありませんでした。

基本的に、データベース内には 2 つのテーブルがあります。1 つは tblCounties (ID、County_vc) という名前で、もう 1 つは tblOrganizations (ID、Organization_vc) です。jnCountyOrg (Org_fk_id, County_fk_id) と呼ばれる 2 つをリンクする 3 番目のテーブルがあります。1 つの組織は、最小で 1 つの郡、最大で 3 つの郡に属することができます。PHPを使用して選択クエリをwhileループすると、次のように結果が適切にエコーされます。

郡名1郡名2郡名3

mysql_fetch_array と mysql_fetch_assoc を使用してみました。

結果をそのようにフォーマットしたいと思います。

1 つの郡のみが組織に関連付けられている場合は、「xxx 郡」をエコーし​​ます。

IF 2 つの郡が組織に関連付けられている場合は、「xxx および xxx 郡」をエコーし​​ます。

最後に、3 つの郡 (最大数) が組織に関連付けられている場合は、「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 に答える