2011-08-26 40 views
30

Tôi có một chức năng được liệt kê bên dưới. Khi tôi gọi nó với LIMIT được đặt ở 0,60 như được thấy bên dưới, nó hoạt động tốt. Tuy nhiên, bất cứ khi nào tôi tăng LIMIT đến 70 hoặc cao hơn, hoặc thậm chí loại bỏ LIMIT, lỗi MySQL khi tôi gọi hàm với lỗi: "Hàng 30153 đã bị cắt bởi GROUP_CONCAT()".MySQL "Hàng 30153 bị cắt bởi GROUP_CONCAT()" lỗi

Tôi đã thử tăng giá trị VARCHAR lên 10 000 nhưng điều đó không có tác dụng. Theo như tôi có thể hiểu được từ các lỗi, họ dường như không đủ không gian i nthe biến cho các nội dung. Nhưng như tôi đã đề cập, tôi đã thử tăng kích thước nhưng nó không giúp được gì. Bất kỳ ý tưởng ?? Cảm ơn

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 ; 

Trả lời

60

Bạn có thể đặt biến group_concat_max_len thành giá trị lớn hơn. Hoặc có thể sử dụng GROUP_CONCAT(DISTINCT ...) để hiển thị kết quả.

+2

Cảm ơn - Kết quả đã rõ rệt, vì vậy tôi cố gắng thêm này trong proc của tôi: 'SET GLOBAL group_concat_max_len = 15000;' Nó không tạo nên sự khác biệt mặc dù ?? Đó có phải là cách sử dụng đúng không? – Cheeky

+0

Xem sách hướng dẫn (nhấp vào "group_concat_max_len", đó là liên kết) để có mô tả đầy đủ. 15 000 trông loại nhỏ, hãy thử giá trị tối đa của nền tảng của bạn :) Cũng đọc chủ đề GROUP_CONCAT, nó cũng có một số thông tin về hành vi và nhận xét về biến max_allowed_packet. – ain

+0

Ồ, và loại bỏ CHAR (10000) cast - nó làm cho kết quả dài hơn và do đó gây ra vấn đề, không sửa chữa chúng! – ain

2

1) Tăng giới hạn về số lượng các ký tự từ truy vấn kết quả
SET group_concat_max_len=15000;
HOẶC
SET session group_concat_max_len=15000;

2) Sau đó thêm DISTINCT như param đầu tiên GROUP_CONCAT() để loại bỏ bản sao từ truy vấn kết quả. GROUP_CONCAT(DISTINCT ..).

truy vấn của bạn sẽ trông như thế này:

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

Mọi chi tiết, xem phần này của các tài liệu https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

Các vấn đề liên quan