2011-11-15 14 views
8

どのように各ページのすべてのタグを見つけて、1つの列にタグを連結できますか?例えば 各ページのすべてのタグを見つけてタグを1つの列に連結するにはどうすればよいですか?

ページテーブル、

page_id 
1 
2 
3 
4 

タグテーブル、

tag_id  tag_name 
1   A 
2   B 
3   C 
4   D 

タグ付けされたテーブル、

page_id  tag_id 
1   1 
1   2 
1   3 
3   2 
3   3 

私の作業クエリ、

SELECT 
    p.page_id, 
    GROUP_CONCAT(t.tag_name ORDER BY t.tag_name ASC SEPARATOR ",") AS tags 

FROM root_pages AS p 

LEFT JOIN root_mm_pages_tags AS m 
ON p.page_id = m.page_id 

LEFT JOIN root_tags AS t 
ON t.tag_id = m.tag_id 

WHERE p.page_id = t.page_id 

これは私が後だ、

page_id   tags 
1    A, B, C 
2    NULL 
3    B, C 
4    NULL 
+3

+1多対多の正しい方法をとっているため。 – NullUserException

+0

NullUserExceptionに感謝します! :-)同じ理由で – laukok

+0

が+1されました。 – toon81

答えて

1

ON p.page_id = tt.page_idWHERE p.page_id = t.page_idせずにそれを試した結果です。また、パフォーマンスのために最後の結合を通常のものにします。

SELECT 
    p.page_id, 
    GROUP_CONCAT(t.tag_name ORDER BY t.tag_name ASC SEPARATOR ",") AS tags 

FROM root_pages AS p 

LEFT JOIN root_mm_pages_tags AS m 
ON p.page_id = m.page_id 

JOIN root_tags AS t 
ON t.tag_id = m.tag_id 

GROUP BY p.page_id 
+0

申し訳ありません 'ON p.page_id = tt.page_id'は私の間違いでした。 – laukok

+0

np。結局のところ、週末になってしまって...ああ待って。 – toon81

+0

私はあなたの答えを試しましたが、 'tag'の列に繰り返しタグをつけた1行しか返しませんでした... :( – laukok

関連する問題