如何确定MySQL查询的组concat使用的长度

时间:2017-06-11 00:46:24

标签: mysql laravel-5 mysql-5.7

我正在使用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

1 个答案:

答案 0 :(得分:0)

我首先要运行

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的限制,那么您可以查询目标数据的子集,然后将结果加入到最后。