从最高到最低排名时处理关系

时间:2010-05-30 14:43:04

标签: php

我正在尝试为一个小项目建立一个排名管理器。总数存储在数据库中。我可以轻松地使用mysql获取最大值和最小值,并安排记录下降。问题出现在有关系时我需要在表格中显示一个平局:1,2,3,3,4,5,6,7,7,7,7等。重复的数字将显示关系。我一直在想办法实现上述目标,但我需要更多的想法;我的看似漫长而复杂。

任何人都可以分享他/她关于建立关系的想法。

2 个答案:

答案 0 :(得分:0)

$data = array(
  'A'=>19,'B'=>18,'C'=>17,'D'=>17,'E'=>16,'F'=>15
);

$rank = 0;
$lastScore = PHP_INT_MAX;
foreach( $data as $name=>$score ) {
  if ( $lastScore !== $score ) {
    $lastScore = $score;
    $rank += 1;
  }
  printf("%s %d (%d)\n", $name, $score, $rank);
}

打印

A 19 (1)
B 18 (2)
C 17 (3)
D 17 (3)
E 16 (4)
F 15 (5)

答案 1 :(得分:-1)

你能不能只在SQL中做到这一点?具有重复等级的记录仍然会得到输出,但是领带内的顺序将是未定义的。

SELECT id, rank FROM mytable ORDER BY rank ASC;
啊,看起来我误解了这个问题,谢谢马图。这仍然可以通过相对简单的SQL查询来实现。关键是使用子查询来计算已经过去的不同分数。

SELECT id, score, (
  SELECT COUNT(DISTINCT score) + 1 
  FROM mytable 
  WHERE score < outerscore.score 
  ORDER BY score ASC
) AS rank
FROM mytable as outertable
ORDER BY score ASC;