【问题标题】:Is there any maximum limit with mysql Group concat?mysql Group concat有最大限制吗?
【发布时间】:2019-01-28 16:58:10
【问题描述】:

以下是我从具有组 concat 的表中获取记录的查询。

SELECT GROUP_CONCAT(CONCAT('''', order_number, '''' )) as order_number FROM edi_order_response where order_status = 'DELIVERED_INTIME' AND  DATE(`arul_timestamp`) BETWEEN '2018-08-21' AND '2018-08-22'

从上面的查询中,我得到了 93 条记录和一条带有单引号的未终止记录,如下所示

'78E4PLMF','7TQ223UD','8FKC5B2F',......,'89KB6MRR','

但是当我在上述日期范围的相关表中看到时,有近 330 条记录。那么有没有办法根据给定的日期范围获取所有记录?任何帮助将不胜感激。

【问题讨论】:

  • 在我看来,GROUP_CONCAT 几乎没有任何用处,所以我的回答是:不要理会 GROUP_CONCAT!
  • 顺便提一下,arul_timestamp BETWEEN '2018-08-21 00:00:00' AND '2018-08-22 23:59:59' 会快几个数量级
  • 如果您无法更改系统设置,那么您不能使用 group_concat ,结果将 > 大于默认最大值。您可能需要以不同的方式展示结果集,或者让任何您的展示工具来完成这项工作。
  • @strawberry 更好的是arul_timestamp >= '2018-02-21' AND arul_timestamp < '2018-08-23'
  • @P.Salmon,感谢您的建议。我已经使用 PHP 修复了这个问题

标签: mysql sql concat group-concat


【解决方案1】:

默认由group_contact_max_len控制,最大长度为1024 characters

您可以更改它以获取更多数据,例如:

SET @@group_concat_max_len = value_numeric;

value_numeric 必须是 > 1024;默认情况下,group_concat_max_len 的值为 1024

更改您的 mysql .ini 文件并重新启动您的服务器。

如果您无法访问服务器,则可以通过设置临时会话范围来实现此目的

SET SESSION group_concat_max_len = 1000000;
select group_concat(column) from table group by column

但它只会在这个会话中起作用。对于不同的会话,您必须重新设置它。

【讨论】:

    【解决方案2】:

    是的。由设置group_concat_max_len控制,默认为1024。

    您可以在documentation 中了解它。

    您也可以将值设置为更高的值:

    SET [GLOBAL | SESSION] group_concat_max_len = <some larger value>
    

    【讨论】:

    • 有没有办法从查询中实现这一点?因为我们无权访问 ini 文件。
    • @user3408779 。 . .您可以在会话级别进行设置。例如:rextester.com/EFKOT50079.
    猜你喜欢
    • 2016-03-06
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多