2012-08-12 4 views
1

Ma question est assez similaire à MySQL: is it possible to group_concat multiple rows?, mais je n'arrive pas à comprendre comment fonctionne la concat de groupe.MySQL - GROUP_CONCAT avec jointures

Mon jeu de données réel serait difficile à expliquer - j'utiliserai un ensemble simplifié de tables et de relations à titre d'exemple.

dire que j'ai une table photos

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

et une table tags

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

et un pont appelé photo_tags

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

et je veux revenir des lignes comme ceci:

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

ou ...

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

Mon estimation initiale était quelque chose comme ceci:

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 

Mais (probablement évident pour quelqu'un qui sait ce qu'ils font), qui n » ai pas t travail. Après avoir fait quelques recherches, et faisant référence au lien ci-dessus, j'ai essayé diverses permutations de cette:

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.

Répondre

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 

Vous devez regrouper par une colonne qui sera unique pour chaque ligne et dans le groupe, vous pouvez construire une group_concat d'autres colonnes. Changez donc votre group by en photos.filename.

+0

fonctionne, merci. Il se trouve que j'avais essayé, mais l'interface utilisateur (sqlyog) ne montre pas les valeurs concaténées pour des raisons inconnues. J'accepterai dès que je le pourrai (4 minutes). – momo