2010-04-12 45 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