MYSQL函数和组_CONCAT存在问题
我在下面创建了数据库函数。但是,当我运行它时,结果的顺序不正确,也没有应用限制。例如,我返回的数据是:MYSQL函数和组_CONCAT存在问题,mysql,Mysql,我在下面创建了数据库函数。但是,当我运行它时,结果的顺序不正确,也没有应用限制。例如,我返回的数据是: 31471|31471.jpg,31472|31472.jpg,31473|31473.jpg,31474|31474.jpg,31475|31475.jpg,31476|31476.jpg,31478|31478.jpg,31479|31479.jpg 如您所见,有3个以上的结果(限制不起作用),id在应该下降的时候上升,即使它是按日期排序的(按不起作用的顺序) 这个函数唯一不同的地方是G
31471|31471.jpg,31472|31472.jpg,31473|31473.jpg,31474|31474.jpg,31475|31475.jpg,31476|31476.jpg,31478|31478.jpg,31479|31479.jpg
如您所见,有3个以上的结果(限制不起作用),id在应该下降的时候上升,即使它是按日期排序的(按不起作用的顺序)
这个函数唯一不同的地方是GROUP_CONCAT。这是问题的根源吗?原因是什么。如果没有,那么函数有什么问题
谢谢
DELIMITER $$
DROP FUNCTION IF EXISTS `fnAlbumGetRecentPhotoList` $$
CREATE DEFINER=`root`@`%` FUNCTION `fnAlbumGetRecentPhotoList`(_albumId int) RETURNS varchar(1024) CHARSET utf8
BEGIN
-- ----------------------------------------------------------------------
-- Gets a list of 3 most recent photos for an album
-- ----------------------------------------------------------------------
DECLARE _outRecentPhotoList VARCHAR(1024);
SET _outRecentPhotoList = (
SELECT (CAST(GROUP_CONCAT(CONCAT(photoId, '|', photoFileName)) AS CHAR(10000) CHARACTER SET utf8)) AS recentPhotoList
FROM photo
WHERE photoAlbumId = _albumId
ORDER BY photoCSD DESC
LIMIT 0,3
);
RETURN _outRecentPhotoList;
END $$
DELIMITER ;
GROUP_CONCAT()返回一行,因此对其应用限制和顺序将无法满足您的需要
如果在子查询中嵌入LIMIT和ORDER BY,则可以获得所需的3行,然后将它们连接起来
像这样:
SELECT (CAST(GROUP_CONCAT(CONCAT(photoId, '|', photoFileName)) AS CHAR(10000)
CHARACTER SET utf8)) AS recentPhotoList
FROM
(
SELECT photoId,photoFileName
FROM photo
WHERE photoAlbumId = _albumId
ORDER BY photoCSD DESC
LIMIT 0,3
) as sub_query
无法将组_CONCAT的列强制转换为varchar(255)数据类型吗?@user4033385:不,Cast()仅支持某些类型,包括CHAR但不支持varchar:@lke Walker我有ETL作业,该作业要求组_CONCAT()列为varchar。任何可能的解决方法,请告知。我签入的MySQL引用无法find@user4033385没有理由不能将组_CONCAT()的输出插入到VARCHAR列中。如果你有问题,我建议你问一个新问题。@lke Walker我需要重新措辞我的问题。我在基表中的现有列是varchar(25),我正在创建一个视图,而GROUP_CONCAT()被设置为一个列,它在show create视图中显示为“text”数据类型。组_CONCAT()列是否可能有“VARCHAR(25)”数据类型。请告知