Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 - Fatal编程技术网

MySQL-生成最“流行”记录的列表

MySQL-生成最“流行”记录的列表,mysql,Mysql,我使用下面的代码生成一个列表,列出某个发布id在表中出现的次数 因此,release_id可以在我的表中出现多次 SELECT release_id, COUNT( release_id ) FROM charts_extended GROUP BY release_id ORDER BY COUNT( release_id ) DESC LIMIT 0 , 30 示例输出 release_id COUNT(release_id) 1231287 76 177617 73 12218 67

我使用下面的代码生成一个列表,列出某个发布id在表中出现的次数

因此,release_id可以在我的表中出现多次

SELECT release_id, COUNT( release_id ) 
FROM charts_extended
GROUP BY release_id
ORDER BY COUNT( release_id ) DESC 
LIMIT 0 , 30
示例输出

release_id COUNT(release_id)
1231287 76
177617 73
12218 67
e、 g.1231287在表中出现76次

我现在如何输出版本id显示的排名中的数字

e、 g

1231287=1 12218=3

“release_id 1231287”是最流行的
“12218是第二流行的”

使用rownum模拟。看到这个链接,它看起来像一篇好文章。

或者这个


使用rownum模拟。看到这个链接,它看起来像一篇好文章。

或者这个


听起来@Steve在MySQL中有一个很好的答案。我的2美分。。。我想这取决于应用程序,但我通常在业务逻辑中处理此类处理。在解析行时,只需将行号添加到行中即可。其中一些问题将是性能问题,但对我来说,这通常只是为了保持代码的干净性和可维护性


根据您的限制0,30,我猜您一次只想显示30?如果你想展示的不仅仅是前30名,我想你会发现,在你的业务逻辑中,在某个地方维护这一点肯定更容易。在PHP中进行分页的一个例子。

听起来@Steve有一个很好的答案,可以在MySQL中实现这一点。我的2美分。。。我想这取决于应用程序,但我通常在业务逻辑中处理此类处理。在解析行时,只需将行号添加到行中即可。其中一些问题将是性能问题,但对我来说,这通常只是为了保持代码的干净性和可维护性

根据您的限制0,30,我猜您一次只想显示30?如果你想展示的不仅仅是前30名,我想你会发现,在你的业务逻辑中,在某个地方维护这一点肯定更容易。在PHP中执行分页的一个示例。

尝试一下:

select release_id, cnt, @row := @row + 1 rank from (
  select release_id, count(release_id) cnt
  from releases
  group by release_id
  order by cnt desc
  limit 30
) final, (select @row := 0) init
小提琴

您必须使用派生表。如果不这样做,订单将被打乱。

尝试一下:

select release_id, cnt, @row := @row + 1 rank from (
  select release_id, count(release_id) cnt
  from releases
  group by release_id
  order by cnt desc
  limit 30
) final, (select @row := 0) init
小提琴


您必须使用派生表。如果不这样做,则顺序将被打乱。

我在自己的一个表上测试了这一点,似乎执行GROUP BY会导致问题,可能是因为返回的行不是实际从表中获取的行。我在自己的一个表上测试了这一点,似乎执行GROUP BY会导致问题,可能是因为返回的行不是实际从表中获取的行。我的“行编号”列中的数字最终会出现顺序错误。