2012-08-12 73 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