2011-06-17 47 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