时间:2011-07-26 09:59:46

标签: mysql database poker

我有一个名为TournamentXPlayer的mySQL扑克数据库,其中包含一个名为TournamentXPlayerID和TournamentID,PlayerID,Finish和Payout的主索引。 我一直在寻找各种方法来计算每位球员获得现金奖的最长连胜纪录。后来我想包括其他的东西,如球员个人连胜(并非所有球员都参加每场比赛,但有些球员在比赛时表现得非常好),最长的连胜纪录,甚至最长连胜而没有赢得奖品。但是目前我无法弄清楚如何最好地统计连胜。 可以这样做吗?

由于 特里

2 个答案:

答案 0 :(得分:1)

我认为tournamentID会自动递增,因此它会提供数据的年表。

这是集团内部订单的典型问题。为此,您需要考虑变量,例如:

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封装了最后一个被考虑的玩家的信息。

答案 1 :(得分:0)

当你要计算条纹时,你需要知道一个玩家完成比赛的时间。否则,如果一名球员进行多重击球,你将得到错误的结果,因为,他可能会在一场超级筹码比赛中打15个小时并完成比赛并同时注册并退出多个超级联赛比赛。您可以按ID-s(相对于开始时间)对锦标赛进行排序,但如果您没有时间,则在玩家完成时,您将永远无法获得正确的结果。

如果我们假设玩家根本不进行多重调整,那么请使用以下算法:

  1. 阅读所有玩家的锦标赛。
  2. 按锦标赛ID
  3. 排序
  4. 搜索最长条纹
  5. 输出最长条纹
  6. 发表评论,如果您有疑问,我会编辑/完成我的回答