2011-06-17 66 views
-1

我有3個表格News,News_tag和Tag,News_tag多對多的新聞和標籤之間的關係。我想讓SQL查詢獲得所有標籤與相應的新聞計數。請幫忙。加入多對多的表格

+0

我想現在用一個標籤關聯多少條新聞。 – 2011-06-17 08:53:27

+0

Nerses請不要忘記接受可以幫助你的答案! – 2011-06-17 11:51:57

回答

5
SELECT COUNT(*) as news_count, t.* 
FROM Tag t 
    LEFT OUTER JOIN News_Tag nt 
     ON t.id = nt.tag_id 
GROUP BY t.id 

不要忘外的deatails加入到與0的消息標籤。

1

不知道表格的結構,很難給出答案。你可能想要像這樣的東西

select news.subject, tag.subject 
from news, news_tag, tag 
where news.id = news_tag.news 
and news_tag.tag = tag.id 
order by tag.subject 

嘗試並提高您的接受率。

+2

-1,隱式加入是邪惡的! – 2011-06-17 08:46:49

+0

@ Scorpi0:對我來說,降低隱式聯接似乎比聯接本身更加邪惡。好吧,太苛刻了,無論如何,因爲解決方案是**工作**。 – 2011-06-17 09:49:32

+0

working!=好... – 2011-06-17 10:07:09

0

假設有一個兩TagNews_tag命名tag列,而你正在尋找的News項目每個Tag數量:

SELECT Tag.tag, COUNT(*) 
FROM Tag 
INNER JOIN News_tag ON News_tag.tag = Tag.Tag 
GROUP BY Tag.tag 
2

我需要知道coloumns告訴你確切的但是它看起來像這樣;

SELECT TagName, COUNT(*) 
FROM Tag t 
INNER JOIN NEws_tag tn 
    ON t.TagID = tn.TagID 
INNER JOIN News n 
    ON n.NewsID = tn.NewsID 
GROUP BY TagName 

看看這裏的語法http://dev.mysql.com/doc/refman/5.0/en/join.html

+0

我認爲你的意思是n.NewsID = tn.NewsID – 2011-06-17 08:59:21

1
SELECT COUNT(*) 
FROM news AS n 
LEFT JOIN (news_tag AS nt, tag AS t) 
ON ( 
    nt.tag_id = t.tag_id 
    AND 
    nt.news_id = n.id 
) 
WHERE (
    t.tag 
    IN (
     '$tag' 
    ) 
) 
+0

'我想讓sql查詢得到所有標籤都帶有相應的新聞數'你有數,但不是新聞標籤。 – Johan 2011-06-17 09:29:32

+0

他的回答對我來說很難閱讀,因爲他希望給出標籤的新聞數量。我會重寫它,但Scorpi0的答案已經很棒了。 – 2011-06-17 16:29:08