mysql数据库如何在内连接后选择具有重复条目的列

时间:2013-08-16 21:46:24

标签: mysql

我有一个包含3个表的数据库

  

带有字段的文章:id:int name:varchar(255)text:text

     带有字段的

标签:id:int name:varchar(255))

     

article_tag,包含字段:id:int article_id:int(foreign key =>   article.id)tag_id:int(foreign key => tag.id)

我希望能够找到与多个标签相关的文章。

如果我这样做:

SELECT article.name FROM article 
JOIN article_tag ON article.id = article_tag.article_id
JOIN tag  ON tag.id = article_tag.tag_id
WHERE tag.name  IN ('science', 'technology', ... );

我收到每篇文章*(它拥有的标签数量);这是预料之中的。

我的问题:是否有一种方法可以对其进行优化,使其按照article.id的频率降序列出(效果是匹配的列表越多,列表中的列表越高)或者说是仅返回与所有标记匹配的记录(结果中出现次数=标记数)。

谢谢,对不起,这个问题没有更好的格式化

2 个答案:

答案 0 :(得分:0)

获取重复文章的计数并订购它们

SELECT article.name ,COUNT( article.name) AS acount FROM article 
JOIN article_tag ON article.id = article_tag.article_id
JOIN tag  ON tag.id = article_tag.tag_id
WHERE tag.name  IN ('science', 'technology', ... )
GROUP BY article.name
ORDER BY acount DESC

答案 1 :(得分:0)

如果我正确理解了这个问题,这应该可以解决问题:

SELECT
  article.id,
  article.name,
  COUNT(*) AS TagCount
FROM article
JOIN article_tag ON article.id = article_tag.article_id
JOIN tag  ON tag.id = article_tag.tag_id
WHERE tag.name  IN ('science', 'technology', ... )
GROUP BY
  article.id,
  article.name
ORDER BY
  TagCount DESC