2012-08-12 94 views
1

我的问题与MySQL: is it possible to group_concat multiple rows?非常相似,但我无法弄清楚组连接的工作方式。MySQL - 带连接的GROUP_CONCAT

我的实际数据集很难解释 - 我将使用一组简化的表格和关系作为示例。

说我有一个表photos

id filename 
1 bob.jpg 
2. ken.png 
3. lisa.jpg 
4. jim.jpg 
... 

和一张桌子tags

id title 
1 family 
2 friends 
3 school 
4 california 
... 

和一个叫photo_tags

photo tag 
1  2 
1  3 
1  4 
2  1 
3  1 

,我想回行这样的桥:

photo_id filename tags 
1   bob.jpg 2,3,4 
2   ken.png 1 
3   lisa.jpg 1 
4   jim.jpg (NULL) 

或...

photo_id filename tags 
1   bob.jpg friends,school,california 
2   ken.png family 
3   lisa.jpg family 
4   jim.jpg (NULL) 

我最初的猜测是这样的:

SELECT photos.filename, 
GROUP_CONCAT(photo_tags.tag) AS associated_tags 
FROM photos 
LEFT OUTER JOIN tags 
ON tags.photo = photos.id 
GROUP BY photo_tags.tag 

但(可能的人明显谁知道他们在做什么),那没”工作。在做了一些研究并参考了上面的链接之后,我尝试了各种排列:

SELECT 
    file_name, 
    GROUP_CONCAT(photo_tag_ids) AS associated_tags 
FROM (
    SELECT 
    photos.filename AS file_name, 
    photo_tags.tag AS photo_tag_ids 
    FROM 
    photos 
    INNER JOIN photo_tags 
     ON photo_tags.photo= photos.id 
) whatever 
GROUP BY file_name 
ORDER BY file_name; 

TYIA。

回答

4
SELECT photos.filename, 
     GROUP_CONCAT(photo_tags.tag) AS associated_tags 
FROM photos 
LEFT OUTER JOIN tags ON tags.photo = photos.id 
GROUP BY photos.filename 

您必须按每列唯一的列进行分组,并且可以在组中创建其他列的group_concat。因此请将您的group by更改为photos.filename

+0

作品,谢谢。原来我试过,但用户界面(sqlyog)没有显示出于未知原因的连续值。我会尽快接受(4分钟)。 – momo 2012-08-12 06:21:05