<分区>
Possible Duplicate:
Mysql rank function
我正在制作一个排名网站,每个用户都会有一个基于级别的独特排名。 #1 是最好的排名,因为有 350,000 个用户,最差的排名将是 #350000。
任何用户都不能拥有与其他任何人相同的排名。现在,当添加新用户时,会计算他们的级别。计算完成后,脚本将“重建”排名,逐一检查每个用户,并计算他们的新排名。
这里是查询的解释:
- "Id"为成员(member)在数据库中的ID
- “RankNum”是他们的级别。它需要重命名。
- “排名”是他们的唯一排名,#1 到 #350000。
这是我当前的脚本:
function RebuildRanks() {
$qD = mysql_query("SELECT `Id`,`RankNum` FROM `Members` ORDER BY `Rank` DESC, `Id` ASC");
$rowsD = mysql_num_rows($qD);
$curRank = 0;
for($x = 1; $x <= $rowsD; $x++) {
$rowD = mysql_fetch_array($qD);
$curRank++;
if($rowD['RankNum'] != $curRank) {
if($curRank != 0) {
mysql_query("UPDATE `Members` SET `RankNum`='$curRank' WHERE `Id`='".$rowD['Id']."'");
}
}
}
return true;
}
对于 350,000 名用户,这往往会运行得很慢。本质上,在数据库中,Rank(“ORDER BY `Rank` DESC”)是它们的级别,因此查询将对它们进行排序。不幸的是,其余的过程很慢。
以这种方式处理所有 350,000 个用户大约需要 97 秒。是否有任何可能的解决方案来更高效、更快速地运行它?