Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL函数和组_CONCAT存在问题_Mysql - Fatal编程技术网

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)”数据类型。请告知