十大收藏完成 - MySQL中的怪物查询公式?

时间:2010-04-12 03:08:58

标签: php mysql calculated-columns

我有以下表格:

用户基本数据(唯一)
[userid] [name] [etc]

用户集(一对一)
[userid] [game]

用户录制的戏剧(多对多)
[userid] [game] [scenario] [etc]

游戏基础数据(唯一)
[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. 获取用户的总拥有方案
  3. 为该用户抓取COUNT(DISTINCT scenario)所有录制的播放
  4. 按总拥有情景划分所有录制的游戏
  5. 最后是2个查询和一点PHP按摩。对于按完成百分比排序的用户列表,事情会变得复杂一些。

    我想我可以在一个查询中抓取所有用户的收集总计,然后所有用户在另一个查询中录制,然后执行计算并对最终数组进行排序PHP,但是当我只想要前10名时,似乎有可能为1000多名用户做这一切。

    在MySQL中是否有一个邪恶的怪物查询可以完成所有这些并LIMIT 10?或者在这种情况下坚持使用PHP处理大部分工作?

1 个答案:

答案 0 :(得分: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