gpt4 book ai didi

php - Mysql获取结果和当前排名

转载 作者:行者123 更新时间:2023-11-30 01:17:45 26 4
gpt4 key购买 nike

=What's the best way of doing this? I'm pulling back 100 records ordered by score for a high score list. I also need to pull back the users rank and points to the next position.

我目前正在这样做,但我不确定这是最好的方法

mysql_query("SELECT * FROM highScores ORDER BY score DESC");

我正在循环这些结果以显示最高分。然后为了获得用户排名和下一点,我正在执行以下操作

$rank = mysql_num_rows(mysql_query("SELECT id, score FROM highScores WHERE score>='$userScore'"));

这让我获得排名,然后我对用户上方的下一个位置进行另一个查询并获取该分数

$next_rank_score = mysql_fetch_assoc(mysql_query("SELECT score FROM highScores ORDER BY score DESC LIMIT " . ($rank-2) . ",1"));

必须有一种更好的方法来做到这一点,但我想不出一个。

最佳答案

如果你正在做的事情有效,你不一定需要改变它。不过,很高兴得到想法,很高兴你提出了要求。

这是一种只需要对数据库进行一次点击的方法。此外,限制返回的记录数量可以提高速度,特别是当您有很多分数可以从中选出前 10 名时。

    <?php

$query = 'SELECT * FROM highScores ORDER BY score DESC limit 0, 101';
$highScores = mysql_query($query);
$ranks = array();
$scores = array();
$score_to_nexts = array();
$i=1;
while ($highScore = mysql_fetch_array($highScores) and $i<102):
$ranks[$i] = $i;
$scores[$i] = $highScore['score'];
if ($i !== 1):
$score_to_nexts[$i-1] = strval($scores[$i-1] - $scores[$i])
endif;
$i++;
endwhile;

$i=1;
while ($i<11):
$rank = $ranks[$i];
$scores = $scores[$i];
$score_to_next = $score_to_nexts[$i];
$i++;
endwhile;
?>

php 以令人眼花缭乱的速度撕裂数组,所以这绝对是接近最快的速度。可能有一些压缩周期的逻辑,但由于您的数组只需处理 11 个成员,所以我会使用它。

您的例程存在一个问题,即分数可能会在数据库读取之间发生变化,因此您的数字无法正确相加。通过运行一次数据库读取的分数,一切都将同步。

关于数据库读取的时间,过去运行额外的数据库读取是一个很大的禁忌,但现在,这几乎不再那么重要了。 Web 服务器会将部分数据库加载到内存中,使得数据库读取通常与仅 php 内存中操作一样快。如果您正在运行大量数据或获得大量流量并且需要节省资源,则异常(exception)。

关于php - Mysql获取结果和当前排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com