我有一个包含3个表的数据库
具有以下字段的文章:id:int名称:varchar(255)文本:text
带有以下字段的标签:id:int名称:varchar(255))
具有以下字段的article_tag:id:int article_id:int(外键=> article.id)tag_id:int(外键=> 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的出现频率降序排列(其效果是与列表中的匹配度越高,所请求的标签越多),或使其仅返回记录与所有标签匹配的标签(结果中出现的次数=标签的数量)。
谢谢,很抱歉,这个问题的格式没有更好
如果我正确理解了这个问题,这应该可以解决问题:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句