【问题标题】:How to group only by joined table column with Doctrine?如何仅通过使用 Doctrine 的连接表列进行分组?
【发布时间】:2019-09-10 16:18:55
【问题描述】:

我有一个连接表:

table1_id|table2_id
1|1
1|2
2|1
2|2
3|1

我需要选择按 table2 分组的行。但我需要特殊的分组。在结果行中,我想看到以下内容:

table1.id|grouped
1,2|1,2
3|1

我尝试了不同的方法。

  • 从 table1 中选择并按 table2.id 分组。失败 - MySql 也需要将查询分组到我的主表中。
  • 从 table2 中选择并按 table1.id 和 table2.id 分组。失败 - 它分别从 table2 中选择行,我希望将它们连接起来,如示例中所示。
  • 从表 1 中选择并按 group_concat(table2.id) 分组。但是 MySql 不允许按聚合函数进行分组。

我的示例查询:http://sqlfiddle.com/#!9/934b64/4。我需要几乎相同的,但是这样它就会有一行值:

1,2|1,2
3|1

【问题讨论】:

    标签: mysql doctrine


    【解决方案1】:

    你快到了。

    您需要在SELECT 子句中使用GROUP_CONCAT,而不是在GROUP BY 子句中。

    SELECT table1_id,GROUP_CONCAT(table2_id) as grouped
    FROM table
    GROUP BY table1_id;
    

    SQL Fiddle查看结果

    对于您的要求,请尝试以下查询:

    select t1.id,t1.value, 
        group_concat(t2.id) as grouped_ids,
        group_concat(t2.value) as grouped_values
    from table1 t1
    join joined_table jt on jt.id1 = t1.id
    join table2 t2 on t2.id = jt.id2
    group by t1.id,t1.value
    

    结果为@​​987654322@

    【讨论】:

    • 奇怪。我看到您的查询有效。但它不适用于我的。 MySql 说:“语法错误或访问冲突:1140 在没有 GROUP BY 的聚合查询中。”实际上,我的表是连接表。有关系吗?
    • @FreeLightman:您只需要在GROUP BY 子句中提及除table2_id 之外的所有其他字段。你能提供完整的查询吗?
    • 对不起,我把任务搞砸了。我更新了问题并添加了真实架构。
    • @FreeLightman,如果没有看到一些实际数据,真的很难给出解决方案。无论如何,我已经用一些示例值更新了我的答案。请试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多