我正在编写一个在线数学测试程序,目前正在编写脚本来计算每个用户获得的排名。以下代码有效,但每次看到它我都会畏缩。
get_set() 将查询结果放入 $users
function rank_users_in_test($tid){
$GLOBALS['DB']->get_set($users,"select user,test from user_results where test=$tid order by points desc,time");
// $users are already in order by rank thanks to ORDER BY
$rank = 1;
foreach ($users as $u){
$GLOBALS['DB']->query("update user_results set world_rank=$rank where user={$u['user']} and test={$u['test']}");
$rank++;
}
}
循环中的查询让我有点哭了。我的问题是,有没有一种方法可以让 MySQL 根据用户在第一次查询结果中出现的顺序自动更新每个用户的排名?这里有一个相关的问题,但它不使用 UPDATE。
我正在使用 MySQL 5。