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 回答