【发布时间】:2018-08-17 05:05:55
【问题描述】:
这是我在这里的第一个问题,所以如果有不清楚的地方或者您需要了解更多信息,请告诉我。希望我已经提供了您需要的信息。
我有一个页面计算挪威的自行车排名。车手在每场比赛中得分,我计算他们的整体排名。到目前为止,已经计算了他们在每场比赛后的排名,并将他们的总分和排名保存在数据库中。这令人沮丧,因为我必须在每次小的更改或更新后运行计算。
在更新的页面中,我在显示表格时使用循环内的这个 PHP 代码计算他们的总分和排名(在循环之前所有三个排名变量都设置为 0):
$rank_tmp++;
if ($rankpoints!=$row["points"]) {
$rank=$rank_tmp;
}
echo $rank
这个简单的代码运行良好,并且给我排名。
挑战在于当我使用分页将结果拆分到每个页面时。
在我添加的查询和代码中:
LIMIT $starting_position, $records_per_page";
$starting_position=($_GET["page_no"]-1)*$records_per_page;
为了让排名在第二页继续,我扩展了循环:
$rank_tmp++;
if ($rankpoints!=$row["points"]) {
$rank=$rank_tmp;
}
echo $rank + $starting_position;
如果我设置“$records_per_page=50”,那么这会按预期工作,第二页上的第一个骑手获得排名 51,依此类推。
问题是:如果骑手 50 和 51 的点数相同,骑手 51 仍将获得 51 位,而不是应得的 50 位。
那么在使用分页时,我如何计算排名和领带?
【问题讨论】:
-
能不能多加点代码,这个有点不清楚..
-
整个数据集有多大?
-
@Strawberry:2015 赛季大约有 8.5k 的成绩(1 场比赛中的 1 名车手是 1 次成绩)。 1,1k 不同的车手和 110 场比赛。
-
@alex:请告诉我哪里不清楚,我会添加更多代码。
-
我想你的问题有解决方案:如果骑手 50 和 51 的积分数相同,骑手 51 仍将获得 51 名而不是 50 名。然后检索不是从50不是从51的记录,并检查检查50和51的分数并显示相应的排名
标签: php mysql pagination