2011-08-26 17 views
30

Ho una funzione elencata di seguito. Quando lo chiamo con il LIMIT impostato a 0,60 come visto sotto, funziona perfettamente. Tuttavia, ogni volta che aumento il LIMIT a 70 o superiore, o addirittura rimuovo il LIMIT, gli errori MySQL quando chiamo la funzione con l'errore: "La riga 30153 è stata tagliata da GROUP_CONCAT()".MySQL "La riga 30153 è stata tagliata dall'errore GROUP_CONCAT()"

Ho provato ad aumentare i valori varchar a 10.000 ma ciò non aiuta. Per quanto posso capire dall'errore, il loro non sembra essere abbastanza spazio nella variabile per il contenuto. Ma come ho detto, ho provato ad aumentare le dimensioni ma non aiuta. Qualche idea?? Grazie

DELIMITER $$ 

DROP FUNCTION IF EXISTS `fnAlbumGetPhotoList` $$ 
CREATE DEFINER=`root`@`%` FUNCTION `fnAlbumGetPhotoList`(_albumId int) RETURNS varchar(2048) CHARSET utf8 
BEGIN 

    DECLARE _outPhotoList VARCHAR(2048); 

    SET _outPhotoList = (

          SELECT (CAST(GROUP_CONCAT(CONCAT(photoId, '|', photoFileName) separator '~') AS CHAR(10000) CHARACTER SET utf8)) AS recentPhotoList 
           FROM 
           (
           SELECT photoId, photoFileName 
           FROM photo 
           WHERE photoAlbumId = _albumId 
           AND photoIsDisabled = 0 
           AND photoIsActive = 1 
           ORDER BY photoId DESC 
           LIMIT 0,60 
          ) as subQuery 
          ); 


    RETURN _outPhotoList; 

END $$ 

DELIMITER ; 

risposta

60

È possibile impostare la variabile group_concat_max_len su un valore superiore. O forse usa GROUP_CONCAT(DISTINCT ...) per ridimensionare il risultato.

+2

Grazie - I risultati sono già distinti, così ho provato ad aggiungere questo nel mio proc: 'SET GLOBAL group_concat_max_len = 15000;' Non ha fatto la differenza però ?? È l'uso giusto? – Cheeky

+0

Vedere il manuale (fare clic su "group_concat_max_len", è un collegamento) per la descrizione completa. 15 000 sembra un po 'piccolo, prova il valore massimo della tua piattaforma :) Leggi anche l'argomento GROUP_CONCAT, anch'esso ha alcune informazioni sul comportamento e le osservazioni sulla variabile max_allowed_packet. – ain

+0

Oh, e sbarazzati del cast CHAR (10000) - rende i risultati più lunghi e quindi causa problemi, non li risolve! – ain

2

1) aumentare il limite sul numero di caratteri dalla query risultante
SET group_concat_max_len=15000;
O
SET session group_concat_max_len=15000;

2) Quindi aggiungere DISTINCT come primo parametro di GROUP_CONCAT() per rimuovere i duplicati dalla query risultato. GROUP_CONCAT(DISTINCT ..).

Vostri criteri avrà un aspetto più simile a questo:

SET session group_concat_max_len=15000; 
... 
    ... GROUP_CONCAT(DISTINCT CONCAT(photoId, ...) 
... 
)  

Per ulteriori informazioni, consultare questa sezione della documentazione https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

Problemi correlati