2017-06-11 2 views
0

Ich benutze MySQL GROUP_CONCAT und ich bin besorgt über die group_concat_max_len Wert zu überschreiten, Standard ist 1024, also brauche ich einen Weg lassen Sie mich wissen, wie viel eine bestimmte SELECT Abfrage von der erlaubten Länge dieser Eigenschaft verwendet?Wie ermittelt man die Länge mit der Gruppe concat der MySQL-Abfrage verwendet

Zum Beispiel nehme die folgende Abfrage:

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

Meine Anwendung erstellt wird mit und ich bin mit DB::select() so, wenn es einen Weg group_concat_max_len dynamisch Laravel es auch besser mit eingestellt werden. Ich habe jedoch vollen Zugriff auf den Datenbankserver und kann group_concat_max_len dauerhaft setzen.

+0

Ich denke, der beste Vorschlag wäre, verwenden Sie nicht GROUP_CONCAT. – Strawberry

Antwort

0

würde ich durch Laufen

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

Und da beginnen, wie viele Ergebnisse kam, dass in aus. Wenn dies den Grenzwert von group_concat_max_len überschreitet, können Sie nach Teilmengen Ihrer Zieldaten suchen und dann die Ergebnisse am Ende verbinden.

+0

Ich denke, dass Property für die Größe in Bytes neigt nicht die Anzahl der Abfrage Zeilen – SaidbakR

Verwandte Themen