我有一个6人足球队的数据库可以追溯到10年后相当规范,所以我可以从中为球员提取大量的数据,例如比赛次数,进球数,球员每场比赛的平均得分数等等 我想为序列添加一个新的统计页面,例如最长连续的守门员连续干净表,团队连续获胜的最长时间,连续游戏中最长的得分等。 重要的桌子是'固定装置'(包括夹具,得分,得分)和'玩'(包含其他玩家,夹具,守门员)。所以要看看谁在夹具128中得分我会用
SELECT playerid, goalsscored
FROM played p
WHERE p.fixtureid = 128 AND goalsscored > 0
那么我将如何形成一个查询,显示哪个球员在大多数连续比赛中得分,例如亚历克斯(球员15)连续6场比赛得分(固定比赛126-132)和戴夫(球员12)连续5场比赛得分(固定比赛130) -135)?最初我们可以假设fixtureid是顺序的而没有中断,并且是游戏的播放顺序。 我已经使用了Sql很长一段时间了,但是被这个问题困扰了,我找不到任何类似的问题。 为了响应更多信息的请求,我添加了EER图。
答案 0 :(得分:0)
以下是我将如何在代码中执行此操作。
Create an List of keyvalue pairs 'CompletedSequences' - key=playerid, value=consecutivagamesscored
Create a similar List of keyvalue pairs 'CurrentSequences'
Select the list of fixtures ordered by date, omitting postponed
For each fixtureid {
For each kv pair in CurrentSequences {
If playerid didn't score in this fixture { /* End of sequence for this kv */
Add kv pair to CompletedSequences if count > 1 /* Only bother saving those with at least 2 in a sequence */
Remove kv pair from CurrentSequences
}
For each scorer in this fixture {
If playerid key exists in CurrentSequences increment count /* Add 1 to sequence */
else create new CurrentSequences kv pair with playerid/1 /* Create new start of sequence for this player */
}
For each kv pair in CurrenSequences /* Finish off the ones left unterminated */
Add kv pair to CompletedSequences if value > 1
Sort CompletedSequencies by value (consecutive games scored)
Make a table of the top 10 sequences with player/count of consecutive games scored.
我不禁觉得一些聪明的SQL脚本会更好地做到这一点我宁愿不必将整个结果集吸入内存中以便在PHP中执行它,如果我可以避免它。如果在MySQL中没有办法,我想我会这样做。