1

私はテーブルcompanyデータを持っています:

id | name | email
 1 | abc  | any@any.com
 2 | xyz  | as@as.com

他のcategoryデータ表は次のとおりです。

id | name
1  | cat1
2  | cat2
3  | cat3

カテゴリと会社の結合テーブルはjoin_cat_company

category_id | company_id | main
          1 |           1| 1
          2 |           1| 0
          3 |           1| 0
          2 |           2| 1
          1 |           2| 0
          3 |           2| 0

結合されたテーブルmainでは、メイン カテゴリに使用されます

私は次のような結果が欲しい:

  company_name | category
           abc | cat1,cat2,cat3
           xyz | cat2,cat1,cat3

メイン カテゴリは、カテゴリ リストの最初のカテゴリでなければなりません

4

2 に答える 2

2

GROUP_CONCAT関数を探しています。

于 2012-05-28T10:34:29.570 に答える
2
SELECT   company.name AS company_name,
         CONCAT_WS(',',
           GROUP_CONCAT(  maincat.name),
           GROUP_CONCAT(othercats.name)
         ) AS category
FROM     join_cat_company
       JOIN company                ON join_cat_company.company_id  =   company.id
  LEFT JOIN category AS maincat    ON join_cat_company.category_id =   maincat.id
                                  AND join_cat_company.main = 1
  LEFT JOIN category AS othercats  ON join_cat_company.category_id = othercats.id
                                  AND join_cat_company.main = 0
GROUP BY company.name

sqlfiddleで参照してください。


編集

上記の@lanzzの優れた観察に加えて、次のように簡単に実行できます。

SELECT   company.name AS company_name,
         GROUP_CONCAT(
           category.name ORDER BY join_cat_company.main DESC
         ) AS category
FROM     join_cat_company
       JOIN company  ON  company.id = join_cat_company.company_id
  LEFT JOIN category ON category.id = join_cat_company.category_id
GROUP BY company.name

sqlfiddleで参照してください。

于 2012-05-28T10:49:25.813 に答える