【问题标题】:How do I select all categories per product and returning this in one row per product?如何选择每个产品的所有类别并在每个产品的一行中返回?
【发布时间】:2025-12-10 19:20:04
【问题描述】:

我现在有点头晕,因为这应该很容易(我认为)。

我有三张桌子:

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

【问题讨论】:

    标签: php mysql


    【解决方案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
    

    【讨论】:

    • 啊,对了。谢谢你:)