Обработка связей при ранжировании от высшего к низшему - PullRequest
0 голосов
/ 30 мая 2010

Я пытаюсь сделать менеджер ранжирования для небольшого проекта. Итоги хранятся в базе данных. Я могу легко получить максимальное и минимальное значения, используя mysql, а также расположить записи по убыванию. Проблема возникает, когда есть связь Мне нужно показать галстук в форме: 1,2,3,3,4,5,6,7,7,7,7 и т. Д. Повторные цифры покажут связи. Я думал о путях достижение вышеупомянутого, но мне нужно больше идей, мое кажется длинным и сложным.

Может кто-нибудь поделиться своей идеей создания связей.

Ответы [ 2 ]

0 голосов
/ 30 мая 2010
$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)
0 голосов
/ 30 мая 2010

Не могли бы вы сделать это не только в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...