2017-06-11 2 views
0

のグループ連結で使用する長さを判断する方法GROUP_CONCATを使用していますが、group_concat_max_lenの値を超えることについては心配しています。デフォルトは1024ですので、具体的にどのくらい具体的に知ることができる方法が必要ですSELECTそのプロパティの許容された長さから使用されるクエリ?例えばMySQLクエリ

は、次の問合せをするとします。

'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'; 

私のアプリケーションはを使用して構築されており、私はそれがまた良くなるLaravelを使用して動的にgroup_concat_max_lenを設定するので、そこかの方法をDB::select()を使用しています。しかし、私はデータベースサーバーへの完全なアクセス権を持っており、group_concat_max_lenを永久に設定することができます。

+0

私は、GROUP_CONCATを使用しないことをお勧めします。 – Strawberry

答えて

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の限度を超えている場合は、ターゲットデータのサブセットを照会し、最後に結果を結合することができます。

+0

私は、proprtyは、クエリ行の数ではなく、バイト単位のサイズが多いと思います – SaidbakR