2

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

我有三张桌子:

  • 产品列表
  • 类别列表
  • 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 中将所有类别(逗号分隔)放在一个变量/列中?

4

1 回答 1

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
于 2013-11-01T19:26:01.733 回答