Mysql 在博客实现中,流行标签的查询是什么?
什么是流行标签的查询? 选项卡Mysql 在博客实现中,流行标签的查询是什么?,mysql,sql,Mysql,Sql,什么是流行标签的查询? 选项卡 blog_tags id name 1 tag1 2 tag2 3 tag3 4 tag4 5 tag5 blog_post_tags id post_id blog_tag_id 1 1 2 2 2 2 3 1 3 4 3 5 5 4 2 output tag2 tag3 tag5 我开始这样写查询: SELECT bt.id, bt.
blog_tags
id name
1 tag1
2 tag2
3 tag3
4 tag4
5 tag5
blog_post_tags
id post_id blog_tag_id
1 1 2
2 2 2
3 1 3
4 3 5
5 4 2
output
tag2
tag3
tag5
我开始这样写查询:
SELECT bt.id, bt.name, bpt.blog_tag_id
FROM
blog_tags bt
RIGHT JOIN
blog_post_tags bpt
ON
bt.id = bpt.blog_tag_id
ORDER BY bt.name ASC
它为我提供了blog_post_标签中使用的标签的输出,但我希望这些标签能够根据受欢迎程度进行排序。我认为这样的查询应该可以工作:
select name from (select blog_tag_id,count(*) as cnt from blog_post_tags group by blog_tag_id order by cnt dsc ) as a inner join blog_tags on a.blog_tag_id = blog_tags.id
我认为这样的查询应该有效:
select name from (select blog_tag_id,count(*) as cnt from blog_post_tags group by blog_tag_id order by cnt dsc ) as a inner join blog_tags on a.blog_tag_id = blog_tags.id
只需将您的
右连接
替换为内部连接
,并将分组为
标记id,如下所示:
select bt.name
from blog_post_tags bpt
join blog_tags bt on bpt.blog_tag_id = bt.id
group by bt.id, bt.name -- Edit: fixing for some strict dbs
order by count(bpt.post_id) desc
请参见sqlfiddle中的内容。只需将您的
右连接
替换为内部连接
,并将分组方式
标记id如下:
select bt.name
from blog_post_tags bpt
join blog_tags bt on bpt.blog_tag_id = bt.id
group by bt.id, bt.name -- Edit: fixing for some strict dbs
order by count(bpt.post_id) desc
请参阅SQLFIDLE中的内容。这是无效分组,比mysql更严格的另一个数据库将为此引发错误query@OtoShavadze哪种db?请告诉我。我会检查的。@vbmari blog\u tag\u id也正确。即使
count(1)
@VBMali-并且您没有得到以下错误:列“bt.name”必须出现在GROUP BY子句中,或者在聚合函数中使用
?@你们两个,如果我将bt.name
添加到GROUP BY
?:)@Oto Shavadze感谢您的严格。这是无效的分组,另一个比mysql更严格的数据库将为此引发错误query@OtoShavadze哪种db?请告诉我。我会检查的。@vbmari blog\u tag\u id也正确。即使count(1)
@VBMali-并且您没有得到以下错误:列“bt.name”必须出现在GROUP BY子句中,或者在聚合函数中使用
?@你们两个,如果我将bt.name
添加到GROUP BY
?:)@Oto Shavadze感谢您的严格要求。请详细说明您的答案,这是一个好答案,不仅仅是代码。@Forward-因此,在内部查询中,通过分组统计blog\u tag\u id
值,然后,这些统计数据加入到blog\u tags
表中,并按count desc
排序不,不是注释,我是指您的答案。:)不是我不明白你的答案,只是缺少一些解释。而且,你的代码绝对正确。我是认真的。请为您的答案做一些详细说明,这是一个好答案,不仅仅是代码。@Forward-因此,在内部查询中,通过分组统计blog\u tag\u id
值,然后,这些统计数据加入到blog\u tags
表中,并按count desc
顺序排列。不,我是指您的答案。)不是我不明白你的答案,只是缺少一些解释。而且,你的代码绝对正确。我是认真的。这也是公认的答案,但由于我的DB结构有一些复合键,这就是它抛出错误的原因。这也是公认的答案,但由于我的DB结构有一些复合键,这就是它抛出错误的原因。