Я пытаюсь создать менеджер ранжирования для небольшого проекта. Суммы хранятся в базе данных. Я могу легко получить max и min, используя mysql, а также упорядочить записи по убыванию. Проблема возникает, когда есть связь. Мне нужно чтобы показать галстук в форме: 1,2,3,3,4,5,6,7,7,7,7 и т. д. Повторные номера будут показывать связи. Я думал о способах достижения вышеуказанного но мне нужно больше идей, мое кажется длинным и сложным.
Может ли кто-нибудь поделиться своей идеей делать связи.
Не могли бы вы просто сделать это в 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;
$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)