MySql查询帮助

时间:2011-03-23 16:58:46

标签: mysql

以下查询对我有用,并以“1755 | 1755.jpg”格式返回数据:

SELECT (CAST(GROUP_CONCAT(CONCAT(photoId, '|', photoFileName)) AS CHAR(10000) CHARACTER SET utf8)) AS recentPhotoList
                              FROM
                              (
                                SELECT photoId, photoFileName
                                FROM photo
                                WHERE photoAlbumId = _albumId
                                AND photoPublishDate >= DATE_ADD(tStartDate, INTERVAL -20 MINUTE)
                                AND photoPublishDate <= tStartDate
                                ORDER BY photoPublishDate DESC
                                LIMIT 0,1
                              ) as subQuery
                            );

但是,只需在查询中附加另一列('photoCaption'),它就不会返回任何内容?!?为什么是这样?为什么要添加一个额外的列导致它执行此操作?

以下是导致问题的修改后的查询:

SELECT (CAST(GROUP_CONCAT(CONCAT(photoId, '|', photoFileName, '|', photoCaption)) AS CHAR(10000) CHARACTER SET utf8)) AS recentPhotoList
                              FROM
                              (
                                SELECT photoId, photoFileName, photoCaption
                                FROM photo
                                WHERE photoAlbumId = _albumId
                                AND photoPublishDate >= DATE_ADD(tStartDate, INTERVAL -20 MINUTE)
                                AND photoPublishDate <= tStartDate
                                ORDER BY photoPublishDate DESC
                                LIMIT 0,1
                              ) as subQuery
                            );

2 个答案:

答案 0 :(得分:3)

我认为如果photoCaption为null,则concat返回null。在photoCaption周围使用coalesce来解决这个问题。

答案 1 :(得分:2)

我认为,

photoCaption为NULL。

也许您可以检查子查询的结果,看看发生了什么。

SELECT CONCAT('bla', '|','-' , '|','|', 'bla', NULL) as foobar;

返回NULL

SELECT CONCAT('bla', '|','-' , '|','|', 'bla') as foobar;

返回bla | - || bla

祝你好运