2012-04-13 54 views
1

我使用下面的代碼產生的一定RELEASE_ID多少次出現在一個表MySQL的 -

所以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是第二最流行'

回答

1

聽起來@Steve對MySQL中實現一個很好的答案。我的2美分......我想這取決於應用程序,但我通常在業務邏輯中處理這種處理。在解析行時,您可以將行號添加到它們。其中一些會成爲性能方面的問題,但對我來說,這通常只是爲了保持代碼的清潔和可維護性。

根據您的LIMIT 0,30,我猜你一次只想顯示30個?如果你想展示的不僅僅是前30名,我認爲你會發現在你的商業邏輯中某個地方保持這一點比較容易。 Here's在PHP中執行「分頁」的一個示例。

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

您必須使用派生表。如果你不這樣做,訂單將被炒。