我有以下表格:
用户基本数据(唯一)
[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的计算顺序是:
User Collection
加入Game Basic Data
和COUNT(gbd.total_scenarios)
COUNT(DISTINCT scenario)
所有录制的播放最后是2个查询和一点PHP按摩。对于按完成百分比排序的用户列表,事情会变得复杂一些。
我想我可以在一个查询中抓取所有用户的收集总计,然后所有用户在另一个查询中录制,然后执行计算并对最终数组进行排序PHP,但是当我只想要前10名时,似乎有可能为1000多名用户做这一切。
在MySQL中是否有一个邪恶的怪物查询可以完成所有这些并LIMIT 10
?或者在这种情况下坚持使用PHP处理大部分工作?
答案 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