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