1

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

例如 1231287 在表格中出现 76 次

我现在如何输出 release_id 出现的排名数字

例如

1231287 = #1 12218 = #3

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

4

3 回答 3

3

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

或者这个。

MySQL 通过选择 rownum 作为起始值来限制选择

于 2012-04-13T04:17:05.050 回答
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

在这里拉小提琴。

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

于 2012-04-13T04:24:27.783 回答
1

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

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

于 2012-04-13T04:21:51.530 回答