我有下表:
用户基础数据(唯一)
[userid] [name] [etc]
用户集合(一对一)
[userid] [game]
用户录制的播放(多对多)
[userid] [game] [scenario] [etc]
游戏基础数据(唯一)
[game] [total_scenarios]
我想输出一个表,该表按百分比降序显示前10名用户的收集-播放完成百分比:
输出表
[userid] [collection_completion]
3 95%
1 81%
24 68%
etc etc
在我看来,一个用户的计算顺序是:
-
从中获取用户的总拥有方案
User Collection
加入
Game Basic Data
和
COUNT(gbd.total_scenarios)
-
获取所有录制的播放
COUNT(DISTINCT scenario)
对于那个用户
-
将所有录制的剧集除以总拥有剧情
这是2个查询,最后还有一点PHP按摩。对于按完成百分比排序的用户列表,事情会变得更复杂一些。
我想我可以抓住
所有用户的集合总数
在一个查询中,以及
所有用户都录制了播放
在另一个例子中,然后用PHP对最后一个数组进行计算和排序,但是当我只想要前10名的时候,对1000多个用户进行所有这些操作似乎有些过分了。
在MySQL中有没有一个邪恶的怪物查询可以做到这一切?
LIMIT 10
?或者在这种情况下,坚持使用PHP来处理大部分工作?