Как рассчитать самую длинную полосу на игрока - PullRequest
3 голосов
/ 26 июля 2011

У меня есть база данных покера mySQL под названием TournamentXPlayer, которая содержит первичный индекс TournamentXPlayerID и TournamentID, PlayerID, Finish и Payout. Я искал способы подсчитать каждому игроку самую длинную серию финиша с денежным призом. Позже я хотел бы включить другие вещи, такие как личная серия игроков (не все игроки играют в каждую игру, но некоторые действительно хорошо играют, когда они играют), самые длинные полосы выигрышей и даже самые длинные полосы без выигрыша приза. Однако на данный момент я не могу понять, как лучше всего считать полосу. Можно ли это сделать?

Спасибо Терри

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Я предположил, что идентификатор турнира автоматически увеличивается, поэтому он обеспечивает хронологию данных.

Это классическая проблема порядка внутри группы.Для этого вам нужно учитывать такие переменные, как:

mysql> set @p_id:=-1; set @streak:=0;
mysql> select playerID,max(streak) from (select playerID,@streak:=if(Payout=0,0,if(@p_id=playerID,@streak+1,1)) streak, @p_id:=playerID from (select playerID,TournamentID,Payout from table order by 1,2) a) a group by 1;

В этом примере etaps:

  • сортировка по игроку, а затем турнир
  • длякаждый игрок:
    • увеличивает переменную полосы, если была выплата
    • установлен на 0, если нет
  • устанавливает полосу на 0, если произошли измененияигрока.p_id! = playerID.p_id инкапсулировал информацию о последнем рассматриваемом игроке.
0 голосов
/ 26 июля 2011

Когда Вы собираетесь рассчитывать полосы, Вам необходимо знать время, когда игрок закончил турнир.В противном случае вы получите неправильные результаты, если у игрока есть мультитейвинг, потому что он может сыграть один турнир с супер стэком в течение 15 часов и выиграть деньги, а в то же время зарегистрироваться и отказаться от участия в нескольких турнирах с гипертурбо.Вы можете сортировать турниры по идентификаторам (относительно времени начала), но Вы никогда не получите правильный результат, если у вас нет времени, когда игрок закончил.

Если предположить, что игроки вообще не могут участвовать в нескольких играх, используйте следующий алгоритм:

  1. Прочитайте все турниры одного игрока.
  2. Сортируйте их по турнируID
  3. Поиск самой длинной полосы
  4. Вывести самую длинную полосу

Оставить комментарий, если у вас есть вопросы, я отредактирую / дополню свой ответ

...