-1

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

具有以下字段的文章: id:int 名称:varchar(255) 文本:文本

带有字段的标记:id:int 名称: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 频率的降序列出(效果是它匹配的请求标签越多,它在列表中的位置就越高)或者它只返回记录匹配所有标签(结果中出现的次数=标签数)。

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

4

2 回答 2

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
于 2013-08-16T22:00:54.260 回答
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
于 2013-08-16T21:58:47.657 回答