3

我有一个名为 TournamentXPlayer 的 mySQL 扑克数据库,其中包含一个名为 TournamentXPlayerID 和 TournamentID、PlayerID、Finish 和 Payout 的主索引。我一直在寻找方法来计算每个球员获得现金奖励的最长连胜纪录。稍后我想包括其他一些东西,比如球员的个人连续纪录(不是所有球员都参加每场比赛,但有些球员在比赛时表现非常好)、最长的连续获胜次数,甚至最长的连续没有获奖。然而,目前我根本不知道如何最好地计算连续性。这可以做到吗?

谢谢特里

4

2 回答 2

1

我假设锦标赛 ID 是自动递增的,因此它提供了数据的年表。

这是组内排序的经典问题。为此,您需要考虑以下变量:

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;

在此示例中,etap 为:

  • 按球员排序,然后是锦标赛
  • 对于每个玩家:
    • 如果有支出,则增加连续变量
    • 如果不是,则设置为 0
  • 如果玩家更换,则将连胜设置为 0。p_id!=玩家ID。p_id 封装了最后考虑的玩家的信息。
于 2011-07-26T10:21:15.873 回答
0

当您要计算连胜数时,您需要知道球员完成比赛的时间。否则,如果玩家在多桌游戏中,您将得到错误的结果,因为,他可能会在一场超级筹码锦标赛中玩 15 个小时并最终获得奖金,同时注册和退出多场超级筹码锦标赛。您可以按 ID-s(相对于开始时间)对锦标赛进行排序,但如果您没有时间,当玩家结束时,您将永远不会得到正确的结果。

如果我们假设玩家根本不玩多人游戏,那么使用以下算法:

  1. 阅读所有一名球员的比赛。
  2. 按锦标赛 ID 对它们进行排序
  3. 搜索最长的连胜
  4. 输出最长的连胜

发表评论,如果您有问题,我将编辑/完成我的答案

于 2011-07-26T10:13:11.063 回答