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