Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多对多表的联接_Mysql_Sql - Fatal编程技术网

Mysql 多对多表的联接

Mysql 多对多表的联接,mysql,sql,Mysql,Sql,我有三个表:新闻、新闻标签和标签、新闻标签和标签之间的多对多关系。我想进行sql查询,以获取具有相应新闻计数的所有标记。请帮助。如果不知道表格的结构,很难给出答案。你可能想要这样的东西 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 尝试提高你的接受率。假设在tag和News

我有三个表:新闻、新闻标签和标签、新闻标签和标签之间的多对多关系。我想进行sql查询,以获取具有相应新闻计数的所有标记。请帮助。

如果不知道表格的结构,很难给出答案。你可能想要这样的东西

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

尝试提高你的接受率。

假设在
tag
News\u tag
中都有一个名为
tag
的列,并且你正在查找每个
tag
新闻项目的数量:

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

我需要知道冒号来告诉你确切的语法,不管它看起来如何

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
在这里查看语法的详细信息


请不要忘记外部连接,以便将标签与0新闻关联。

我现在想将标签与多少新闻关联。请不要忘记接受对您有帮助的答案!我想你的意思是n.NewsID=tn.NewsID
我想用sql查询得到所有带有相应新闻计数的标签
你得到了计数,但不是新闻标签。他的回答让我很难理解,我读它是因为他想要给定标签的新闻数量。我想重写它,但天蝎座的答案已经很好了。@Scorpi0:对我来说,否决投票的隐式加入似乎比加入本身更邪恶。好吧,不管怎么说,太苛刻了,因为解决方案是有效的。这可能应该被否决。。。有很多方法可以进行标记和按标记搜索,有些是快速的,有些不是。当然,这与数百张唱片无关,但它不会扩展well@Scopi0:隐式连接有什么坏处?无论如何,我只是建议一个可能的解决方案,不知道表结构,也不知道OP想要什么。
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'
    )
)
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'
    )
)