0

我有问题。. 就我而言,我获得了冠军。. 要知道,赢家是由最高的价值决定的。. 例子 :

$sql = "SELECT bla bla bla FROM `user` ORDER BY `point` DESC";
$result = mysql_query($sql);
$i=0;
while($row = mysql_fetch_array($result)) {
    $1++;
    echo "rank ".$i." is ".$row['name']." with point ".$row['point'].";
}

它会显示

  • 等级 1 是点 10 的 abc
  • 排名 2 是 def 与点 9
  • 等级 3 是点 8 的 ghi
  • 排名第 4 是 jkl,第 7 点
  • 等级 5 是点 7 的 mno
  • 排名 6 是 pqr 与点 3
  • 排名 7 是点 1 的 stu

这个问题。.

  1. 看结果。. 等级 4 和等级 5 具有相同的点。. 如何使它们处于相同的位置?
  2. 如何自动检测冠军头衔,例如 1 级是大老板,2 级是老板,7 级是工人?
  3. 如何告诉前任:你在第 6 位??
4

4 回答 4

6
$sql = "SELECT bla bla bla FROM `user` ORDER BY `point` DESC";
$result = mysql_query($sql);

if( !$result ){
  echo 'SQL Query Failed';
}else{

  $rank = 0;
  $last_score = false;
  $rows = 0;

  while( $row = mysql_fetch_array( $result ) ){
    $rows++;
    if( $last_score!= $row['point'] ){
      $last_score = $row['point'];
      $rank = $rows;
    }
    echo "rank ".$rank." is ".$row['name']." with point ".$row['point'].";
  }
}

此代码还将适当调整排名 - 例如:

rank 1 is Adam Aarons with point 100
rank 2 is Barry Blue with point 90
rank 2 is Betty Boop with point 90
rank 4 is Charlie Chaplin with point 80

请注意,没有“排名 3”,因为“查理卓别林”实际上是第四高的得分手。

如果您不想要这种行为,那么只需替换$rank = $rows;$rank++;

于 2013-05-24T04:38:48.793 回答
1

ad 1. 逐点分组,添加@curRow := \@curRow + 1 AS row_numbe 选择当前行号作为排名位置

ad 2. left join title_dict on row_number = title_dict.id

其中标题字典是带有 title_id 和标题名称字典的表

广告 3. 从您的选择中选择 id = 您的 id

于 2013-05-24T04:19:02.023 回答
1

实际上,用相同数量的点数为玩家排序的一种非常简单的方法是在“点数”列中添加一个包含上次更新时间戳的“points_last_update”列。然后,您只需将“points_last_update”添加到您的 sql 语句中的 ORDER BY 中。这样,第一个达到积分的玩家获得更高的排名,这是逻辑。

于 2020-04-27T17:46:19.853 回答
0

保存最后一个分数,并确保在增加之前它不等于当前分数。

$sql = "SELECT bla bla bla FROM `user` ORDER BY `point` DESC";
$result = mysql_query($sql);
$i=0;
$lastscore = NULL;
while($row = mysql_fetch_array($result)) {
   if ($lastscore != $row['point']){
   $i++;
   }
   echo "rank ".$i." is ".$row['name']." with point ".$row['point'];
   $lastscore = $row['point'];
}
于 2013-05-24T04:37:02.497 回答