在单独的行记录中使用 GROUP_CONCAT

Using GROUP_CONCAT in separate row records

我在使用 GROUP_CONCAT 时遇到问题。我很确定这是获得我想要的东西的唯一方法,但它似乎没有给我我需要的结果。

这是我的声明:

SELECT
   b.*,
   GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
   `oc_finance_breakpoints` b
   LEFT JOIN
      `oc_finance_breakpoints_codes` c ON c.breakpoint_id = b.breakpoint_id;

这将在 finance_breakpoints table 中收集数据,结构如下:

breakpoint_id
from_value
to_value
minimum_deposit

以及我加入的多个“财务代码”table,finance_breakpoint_codes:

breakpoint_code_id
breakpoint_id
finance_code

断点可能有多个财务代码。当我 运行 和 sql 只有一个条目时,我得到以下信息:

1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12

但是如果在断点 table 中有两个条目,所发生的只是将额外的财务代码附加到上面的末尾,这意味着我只能得到第一组数据的一行, 以及一栏中的所有财务代码。

理想情况下,我希望 return 像这样:

1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12

2 | 750.00 | 1500.00 | 10 | ONIB12-9.9,ONIB24-9.9,ONIB36-9

而不是:

1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12,ONIB12-9.9,ONIB24-9.9,ONIB36-9

有什么方法可以实现我想要的吗?我可能使用了错误的功能吗?

在您的查询中使用聚合函数(例如 GROUP_CONCAT)可确保它将 return 聚合结果,而没有显式分组可确保它将 return 单个总体摘要行。

您需要在查询末尾添加一个 group by 子句 - 如下所示:

SELECT
   b.*,
   GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
   `oc_finance_breakpoints` b
   LEFT JOIN `oc_finance_breakpoints_codes` c 
          ON c.breakpoint_id = b.breakpoint_id
GROUP BY b.breakpoint_id