【发布时间】:2011-07-16 01:30:07
【问题描述】:
我正在努力完成:
- 以尽可能少的 SQL/PHP 方式选择得分最高的前 20 名用户。
- 目前仍未考虑缓存。
到目前为止我做了什么:
我能够检索所有 5k+ 记录及其分数,但不能限制为仅检索或计算前 20 名(示例)。
表格:
用户(ID、姓名) score_rec (id, uid, points) 此表为每个用户提供多个条目。最高分数将是具有最高数量的行、条目的分数。示例:UID 23 可能有 5 行属于它,他的分数是 5。
代码示例:
$query = "SELECT * FROM score_rec,users where users.id = score_rec.uid";
$result = mysql_query($query);
$array1 = Array();
while($row = mysql_fetch_array($result) )
{
//Count their scores
$query2 = "SELECT users.id,users.name,score_rec.uid FROM `score_rec`,`users` where score_rec.uid = $row[uid] and users.id = $row[uid]";
$result2 = mysql_query($query2);
$scores_count = mysql_num_rows($result2);
$array1["$row[name]"] = $scores_count;
}
我认为这可能通过临时表脚本、存储过程或可以查看两个表的简单查询来实现。由于 score_rec 可以单独用于计算最高条目持有者,因此一个查询可能足以满足两个表。
感谢大家提供的任何指导。
【问题讨论】:
-
感谢大家的快速回复,谢谢。所有答案都很好。