1

我的问题与 MySQL 非常相似:是否可以 group_concat 多行?,但我无法理解组 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;

蒂亚。

4

1 回答 1

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 byphotos.filename.

于 2012-08-12T06:16:34.170 回答