Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在博客实现中,流行标签的查询是什么?_Mysql_Sql - Fatal编程技术网

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结构有一些复合键,这就是它抛出错误的原因。