加入很多桌子

时间:2011-06-17 08:40:23

标签: mysql sql

我有3个表新闻,新闻标签和标签,新闻标签新闻和标签之间的多对多关系。我想make sql查询获取所有带有相应新闻计数的标签。请帮忙。

5 个答案:

答案 0 :(得分: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

不要忘记外部联接以使标记为0消息。

答案 1 :(得分:2)

我需要知道列,告诉你确切的语法,但它看起来像;

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

的详细信息

答案 2 :(得分: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

尝试并提高您的录取率。

答案 3 :(得分: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'
    )
)

答案 4 :(得分:0)

假设tagTag中都有一个名为News_tag的列,并且您正在为每个News查找Tag项的数量:

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