2010-04-12 31 views
1

我有以下表格:前10位收集完成 - MySQL中的怪物查詢公式?

用戶的基本數據(唯一的)
[userid] [name] [etc]

用戶採集(一對一)
[userid] [game]

用戶錄製播放(多對多)
(獨特)
[game] [total_scenarios]

我想輸出的表中顯示的遞減%爲了使前10個用戶收集發揮完工百分比:

輸出表

[userid] [collection_completion] 
    3    95% 
    1    81% 
    24    68% 
    etc    etc 

在我的腦海中, ONE USER的計算順序爲:

  1. User Collection獲取用戶總擁有方案並加入Game Basic DataCOUNT(gbd.total_scenarios)
  2. 抓住所有的總擁有場景記錄的COUNT(DISTINCT scenario)播放該用戶
  3. 把所有記錄的戲劇

所以,這2個查詢並在最後一點點PHP按摩。對於按完成百分比排序的用戶列表,情況會稍微複雜一些。

我想我可以抓住所有用戶的集合在一個查詢總計所有用戶記錄的戲劇在另一個,然後做Calcs(計算)和PHP中的最後一個數組排序,但它似乎是矯枉過正可能拼盡全力,對於1000+用戶當我只希望前10

有MySQL中的邪惡怪物的查詢,可以做一切和LIMIT 10?還是堅持使用PHP來處理大部分工作,在這種情況下走的路?

+1

你可以存儲百分比在其他地方(例如,另一個表),並更新它,當你改變'用戶記錄的Plays'。那麼這將是一個簡單的JOIN ... ORDER BY百分比。在你的情況下可行嗎? – VolkerK 2010-04-12 03:21:33

回答

2

如果我理解您所需要的正確的話,你可以嘗試像

SELECT userid, 
     us.TotalUserscenario/gbd.total_scenarios collection_completion 
FROM (
      SELECT userid, 
        game, 
        COUNT(scenario) TotalUserscenario 
      FROM UserRecordedPlays urp 
      GROUP BY userid, 
         game 
     ) UserScenarios us INNER JOIN 
     GameBasicData gbd ON us.game = gbd.game 
ORDER BY collection_completion DESC 
LIMIT 10