【问题标题】:Calculating tied ranking in php with pagination用分页计算php中的并列排名
【发布时间】: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


【解决方案1】:

很遗憾,我没有时间直接根据您的答案进行定制,但我整理了一些内容,以便为我的分页查询结果添加排名索引。

foreach($queryResults as $index=>$result)
{
    $currentPage = ceil( $_POST['pageOffset'] / $_POST['limit'] );
    $rank = ($index+1)+($_POST['limit']*($currentPage)));       
}

【讨论】:

  • 如果您要发布答案,请尝试花时间根据 OP 的情况调整您的代码,以使您的答案对他和其他阅读此问题的人更有用跨度>
猜你喜欢
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2010-11-06
  • 2021-10-27
相关资源
最近更新 更多