如何在PHP中建立排名系统

时间:2013-05-24 04:12:49

标签: php ranking

我有问题。 。 在我的情况下,我做冠军。 。你知道,胜利者是由最高价值决定的。 。 示例:

$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是abc,点10
  • 排名2与第9点相对应
  • rank 3是ghi with point 8
  • rank 4是jkl with point 7
  • 等级5是mno与第7点
  • 等级6是点3的pqr
  • 排名7是第1点的stu

问题。 。

  1. 查看结果。 。等级4和等级5具有相同的点。 。怎么做 他们在相同的位置?
  2. 如何自动检测等级1的冠军头衔是大老板,等级2是老板,等级7是工人??
  3. 如何告诉前:你在6月

4 个答案:

答案 0 :(得分:5)

$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++;

即可

答案 1 :(得分:1)

ad 1.逐点,添加@curRow:= \ @curRow + 1 AS row_numbe选择当前行号,这将是排名位置

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

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

广告3.从您的选择ID =您的ID

中选择

答案 2 :(得分:1)

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

答案 3 :(得分: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'];
}