【问题标题】:How to determine the length used with group concat of MySQL query如何确定与 MySQL 查询的 group concat 一起使用的长度
【发布时间】:2017-11-12 17:55:43
【问题描述】:

我正在使用 MySQL GROUP_CONCAT,我担心会超出 group_concat_max_len 的值,默认值为 1024,所以我需要一种方法让我知道特定的 SELECT 查询从允许的长度中使用了多少那个属性?

例如假设以下查询:

'SELECT duration, defect_id, defects.title, caves FROM ('
                . 'SELECT SUM('
                     . 'TIMESTAMPDIFF(MINUTE,GREATEST(:startDate, ca.created_at),LEAST(:endDate,IFNULL(ca.closed,NOW())))'
                    . ') AS duration, ca.defect_id, GROUP_CONCAT(cavity_id) as caves FROM cavity_actions as ca WHERE'
                    . ' ca.job_id = :job_id AND ca.defect_id IS NOT NULL GROUP BY ca.defect_id'
                . ') AS durations'               
                . ' LEFT JOIN defects ON durations.defect_id = defects.id '

                . 'ORDER BY duration DESC';

我的应用程序是使用 构建的,而我正在使用 DB::select(),所以如果有办法使用 Laravel 动态设置 group_concat_max_len,它也会更好。但是,我可以完全访问数据库服务器,并且可以永久设置group_concat_max_len

【问题讨论】:

  • 我认为最好的建议是不要使用 GROUP_CONCAT。

标签: laravel-5.4 mysql laravel-5 mysql-5.7


【解决方案1】:

我会从跑步开始

SELECT COUNT(*) FROM cavity_actions WHERE ca.job_id = job_id AND ca.defect_id IS NOT NULL GROUP BY ca.defect_id

然后看看有多少结果来自于此。如果这超出了 group_concat_max_len 的限制,那么您可以查询目标数据的子集,然后最后加入结果。

【讨论】:

  • 我认为属性倾向于以字节为单位的大小而不是查询行数
猜你喜欢
  • 2016-02-12
  • 2015-10-19
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
相关资源
最近更新 更多