我现在有一点大脑冻结,因为这应该很容易(我想)。
我有三张桌子:
我想列出带有类别(名称)的产品。一种产品可能有很多种类。
// 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中是否可以将所有类别(逗号分隔)放在一个变量/列中?
答案 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