2011-12-15 15 views
0

考慮一個標準的標準多對多標籤系統(文章,標籤,tag_map的三個表格)。我想獲得帶有關聯文章的標籤列表;例如如何在標準化數據庫中加入tag_map

Tag Article_IDs 
tag1 1,5,7 
tag2 3,4,5,7,8 
..... 

我應該如何JOIN表生成這個名單?

簡單計算tag_map中行數的簡單方法WHERE tag ='something'。糟糕的是,對於這種方法,我們需要爲每個標籤單獨查詢。例如,要生成20個標籤的列表,我們需要20個查詢(這是不合理的)。我希望這樣做是一個與JOIN查詢。

回答

2

您可以group_concat聚集功能acomplish這一點。他們是很多堆棧溢出的樣本。

SELECT tag.id, 
GROUP_CONCAT(post.post_id) 
FROM 
    posts 
    inner join 
    post_tag on ... 
    inner join 
    tags on ... 
GROUP BY tag.id; 
+0

非常微妙的點,我錯過了! – Googlebot 2011-12-15 12:30:03

1

像這樣的東西應該工作(但是這僅適用於Oracle,我不知道wm_concat()其他數據庫上等價):

select t.tagname, wm_concat(m.articleid) from tags t, tag_map m where t.id = m.tagid group by t.tagname; 
1
Select t.Tag, Group_Concat(a.Article_ID) 
From tag_map tm 
Join tag t on tm.tag_id = t.tag_id 
Join articles a on tm.article_id = a.article_id 
Group By t.Tag