我正在研究如何实现排行榜。我想做的是能够通过几个不同的过滤器(分数,提交的数量,平均值)对表格进行排序。桌子可能是这样的。
+--------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-----------------------+------+-----+---------+-------+
| userID | mediumint(8) unsigned | NO | PRI | 0 | |
| score | int | YES | MUL | NULL | |
| numSub | int | YES | MUL | NULL | |
+--------+-----------------------+------+-----+---------+-------+
一组数据样本如下:
+--------+----------+--------+
| userID | score | numSub |
+--------+----------+--------+
| 505610 | 1245 | 2 |
| 544222 | 1458 | 2 |
| 547278 | 245 | 1 |
| 659241 | 12487 | 8 |
| 681087 | 5487 | 3 |
+--------+----------+--------+
我的查询将来自PHP。
// get the top 100 scores
$q = "select userID, score from table order by score desc limit 0, 100";
这将首先返回一组按用户标识/分数排序的最高分数
我还有一个按numSub排序的查询(提交的数量)
我想用score/numSub的平均分对这个表进行排序;这个表可能很大,所以效率对我很重要。
提前谢谢!
最佳答案
如果效率很重要,则添加一列avgscore
并将其值指定为score/numsub
。然后,在列上创建索引。
添加或修改行时,可以使用插入/更新触发器自动执行平均值计算。
一旦您的表变大,排序将需要相当长的时间。
关于mysql - MySQL排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16466168/