在一行中获取多个类别

时间:2012-05-28 10:31:58

标签: mysql sql

我有表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

主要类别必须是类别列表的第一个

2 个答案:

答案 0 :(得分:2)

您正在寻找GROUP_CONCAT功能。

答案 1 :(得分: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的优秀observation之后,你可以这样做:

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上查看。