如何为每个产品选择所有类别并将每个产品返回一行?

时间:2013-11-01 19:15:38

标签: php mysql

我现在有一点大脑冻结,因为这应该很容易(我想)。

我有三张桌子:

  • 产品列表
  • 类别列表
  • category_map(链接产品和类别)

我想列出带有类别(名称)的产品。一种产品可能有很多种类。

// This query
SELECT a.id, a.name, b.category
FROM sl_link_product_category c
LEFT JOIN sl_product a ON c.fk_productID = a.id
LEFT JOIN sl_category b ON c.fk_categoryID = b.id
WHERE c.fk_categoryID = b.id
ORDER BY a.id
// Gives me this result
| 1 | product 1 | cat 1 |  
| 1 | product 1 | cat 2 |  
| 1 | product 1 | cat 3 |  
| 2 | product 2 | cat 2 |
| 2 | product 2 | cat 4 |

现在,在最终结果集中,我想要一个包含产品的数组,其中每个产品都有一个类别数组。

我的问题是;我是否必须使用PHP中的结果集来实现我的目标?或者在MySQL中是否可以将所有类别(逗号分隔)放在一个变量/列中?

1 个答案:

答案 0 :(得分:1)

您正在寻找GROUP_CONCAT功能:

SELECT a.id, a.name, GROUP_CONCAT(b.category)
FROM sl_link_product_category c
LEFT JOIN sl_product a ON c.fk_productID = a.id
LEFT JOIN sl_category b ON c.fk_categoryID = b.id
GROUP BY a.id, a.name
ORDER BY a.id
相关问题