我有表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
主要类别必须是类别列表的第一个
答案 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上查看。