MySQL - 生成大多数“热门”记录的列表

时间:2012-04-13 04:14:43

标签: mysql

我使用以下代码生成某个release_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次

我现在如何输出release_id出现的等级数

e.g。

1231287 =#1 12218 =#3

'release_id 1231287是最受欢迎的 '12218是第二最受欢迎的'

3 个答案:

答案 0 :(得分:3)

使用rownum模拟。看到这个链接,它看起来像一篇好文章。 http://craftycodeblog.com/2010/09/13/rownum-simulation-with-mysql/

或者这个。

MySQL Limit selection by selecting rownum as start value

答案 1 :(得分:2)

尝试一下:

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

小提琴here

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

答案 2 :(得分:1)

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

根据您的LIMIT 0,30,我猜您只想一次显示30个?如果你想要展示超过前30名,我想你会发现在你的业务逻辑中维护它肯定更容易。 Here's在PHP中进行“分页”的一个例子。