1

私の質問は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;

ティア。

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 byしてくださいphotos.filename

于 2012-08-12T06:16:34.170 に答える