我正在做一个项目,到目前为止有 7000 多行排行榜数据,其中包含名称、id、分数和排名。它在不断扩展,我目前遇到了一个问题,即每次有人发布新分数时尝试更新所有内容后服务器超时。
目前,我正在使用 PDO 和一个结合了循环执行()调用的查询。是否有更快的方法来执行此操作(可能在单个 mySQL 查询中)?或者,您对如何处理更新排行榜有什么建议吗?
$stmt = $dbh->prepare("SELECT * FROM high_scores ORDER BY score DESC");
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$results = $stmt->fetchAll();
//
$numItems = count($results);
// is this OK or a no-no?
try {
$stmt = $dbh->prepare("UPDATE high_scores SET rank = :rank WHERE uid = :uid");
for($i=0; $i<$numItems; $i++){
$rank = $i + 1;
$uid = $results[$i]['uid'];
$stmt->execute(array(':rank' => $rank, ':uid' => $uid));
}
return true;
} catch (PDOException $e) {
echo($e->getMessage());
}