【发布时间】:2011-02-06 20:39:46
【问题描述】:
我有以下表格:
用户基本数据(唯一)[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 处理大部分工作?
【问题讨论】:
-
您可以将百分比存储在其他地方(例如另一个表)并在您对
User Recorded Plays进行更改时更新它。那么这将是一个简单的 JOIN... ORDER BY percent。这在您的场景中可行吗?
标签: php mysql calculated-columns