我正在研究如何实现排行榜。我想做的是能够通过几个不同的过滤器(分数,提交的数量,平均值)对表格进行排序。桌子可能是这样的。

+--------+-----------------------+------+-----+---------+-------+
| 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/

10-09 08:24
查看更多