2015-11-10 4 views
0

У меня есть требование представлять результаты лестницы, которые ранее были сохранены на листе excel, на веб-сайте.Лучший способ представить лестницу в базе данных

Игроки на лестнице не имеют баллов. Если игрок A победит игрока B, игрок A будет помещен над игроком B в лестнице.

Моя проблема заключается в следующем: Допустим, у меня есть 5 игроков, место следующим образом:

  1. Игрок 1
  2. Игрок 2
  3. игрока 3
  4. игрока 4
  5. игрока 5

Если игрок 5 победил игрока 1, то Pl Теперь ayer 5 перемещается в верхней части лестницы. Если порядок игрока определяется по номеру рейтинга, я должен обновить рейтинг всех игроков между теми, кто на самом деле играл, что просто звучит неправильно для меня.

У меня была идея назначить баллы каждому игроку, если игрок A бьет игрока B, тогда игрок A получает счет игрока B + 1, тогда рейтинг - это счет в порядке убывания. Это работает достаточно хорошо до такой степени, когда игроки заканчивают один балл. Я тоже обойдусь с добавлением поля «LastUpdated» в базе данных, поэтому, какой бы последний балл не получил последнее обновление, он идет ниже другого (игрок LastUpdated на самом деле не избил игрока по тому же счету, они просто были перевезены туда). Тогда это не удается в тот момент, когда человек делает несколько корректировок в тот же день, поэтому несколько игроков попадают на один и тот же балл, и порядок ранжирования зависит только от того, какой игрок последний раз обновлялся. Это проблема, так как есть потребность в том, чтобы администратор мог свободно перемещать игроков вверх и вниз. Это также делает невозможным добавить игрока между игроками с одинаковой оценкой (победителю придется прыгать по всей группе).

Моей последней целью было бы получить текущий порядок ранжирования из базы данных, поместить все это в таблицу, позволить администратору свободно перемещать игроков туда, где они хотят, а затем иметь одну операцию сохранения, которая будет получать текущий рейтинг всех игроков и обновить всех. Это звучит ужасно неправильно.

В лестнице около 160 игроков, поэтому операция не будет особенно длинной, просто звучит неправильно.

Итак, что бы лучше всего изменить порядок ранжирования и получить его в базе данных?

ответ

1

Если ваша база данных поддерживает точные числовые типы данных, ее можно легко решить, если столбец ранжирования будет точным числом.
Тогда, когда игрок 5 бьет игрока 2, все, что вам нужно сделать, - установить рейтинг игрока 5 между игроками 2 и 1 игрока. так как это точный номер, ваш предел - предел точности выбранного типа данных.

Образца данные:

id name  rank 
1. Player 1 1.0 
2. Player 2 2.0 
3. Player 3 3.0 
4. Player 4 4.0 
5. Player 5 5.0 

Теперь игрок 5 биений игрока 2. так что все, что вам нужно сделать, это установить его ранг до 1,5, что находится между игроком 2 рангом и первым рангом высшим тогда игроком 2-х. Если игрок 4 будет бить игрока 1, я бы поставил его в ранг 0,5, так как у игрока 1 никто не был выше.

+0

Я бы использовал большие целые числа, например, от 1 000 000 до 5 000 000 для первоначального подсчета очков, но в остальном это хорошее решение. –

+0

@GilbertLeBlanc Это в принципе то же самое, просто читать легче, я думаю. –

+0

Приятный подход, но что произойдет, если игрок 5 бьет игрока 2 (рейтинг игрока 5 теперь равен 1.5), тогда игрок 4 бьет игрока 2 (также, как и в рейтинге 4) 1.5, игрок 3 бьет игрока 5 - это его ранг теперь 1.4, прыгая прямо над Игроком 4? – RekaB

Смежные вопросы