MySql表中的结果序列

MySql表中的结果序列,mysql,Mysql,我有一个可以追溯到10年前的6人制足球队的数据库,这是一个相当正常的数据库,因此我可以从中提取球员的大量统计数据,例如比赛次数、进球数、球员每场平均得分等。 我想为序列添加一个新的统计页面,例如守门员连续不失球最长时间、球队连续获胜最长时间、连续比赛得分最长时间等。 重要的表格是“fixtures”(包括fixtureid、scorefor、scorefrom)和“playerd”(包括playerid、fixtureid、goalsscored)。所以要看谁在第128场比赛中得分,我会用 SE

我有一个可以追溯到10年前的6人制足球队的数据库,这是一个相当正常的数据库,因此我可以从中提取球员的大量统计数据,例如比赛次数、进球数、球员每场平均得分等。 我想为序列添加一个新的统计页面,例如守门员连续不失球最长时间、球队连续获胜最长时间、连续比赛得分最长时间等。 重要的表格是“fixtures”(包括fixtureid、scorefor、scorefrom)和“playerd”(包括playerid、fixtureid、goalsscored)。所以要看谁在第128场比赛中得分,我会用

SELECT playerid, goalsscored 
FROM played p
WHERE p.fixtureid = 128 AND goalsscored > 0
那么,我如何形成一个查询,显示哪名球员在大多数连续比赛中得分,例如亚历克斯(playerid 15)在连续6场比赛中得分(fixtureid 126-132),戴夫(playerid 12)在连续5场比赛中得分(fixtureid 130-135)?最初,我们可以假设fixtureid是连续的,没有中断,并且是游戏的顺序。 我已经使用Sql很长一段时间了,但是被这个问题难住了,我以前找不到任何类似的问题。 为了响应更多信息的请求,我添加了一个EER图。

以下是我在代码中的实现方法

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中没有办法,我想我必须这样做。

你能告诉我们你的表的结构吗?如何设置“连续”游戏?它们是按日期连续的,还是按表中的游戏id连续的?过程如何知道任何两场比赛是连续的?所以只有两队?。。。或者你只为你的球队保存数据我只为我的球队保存数据。10年前,我最初创建了这个网站,主要是为了跟踪玩家的付款情况。我付了广告费,他们也付了我他们的一份,但他们经常忘记说“我下周给你钱”,或者给我10英镑,我没有零钱等等。还有练习网站编程(我以前做过很多年的C/C++/SqlServer)。我会看看我是否能得到一个表格结构,尽管我认为我有足够的givien来回答这个问题。应根据赛程日期选择连续的比赛,尽管在实践中fixtureid将给出相同的顺序,但可能会有奇数间隔