首页 > 解决方案 > PHP/MySQL - 获得连胜

问题描述

我试图展示用户的连胜记录,但我很难弄清楚我将如何编写它——甚至是概念。

这是一个示例(从最新到最旧)数据库:

id | win_id| loss_id| player id
1  |  123  | 999    | 123
2  |  123  | 999    | 123
3  |  999  | 123    | 123
4  |  123  | 999    | 123

所以我想显示的是 player_id: 123 的连胜记录 - 所以,它应该为连胜记录回显“2”,因为用户在 id 3 上输掉了一个中断

标签: phpmysqlsqlgaps-and-islands

解决方案


当前连胜的可能解决方案:找到玩家获胜的所有比赛,但前提是以后没有失败:

SELECT COUNT(t.id)
  FROM table t
 WHERE t.player_id = 123
   AND t.win_id = 123 /* player 123 won */
   AND NOT EXISTS(SELECT * 
                    FROM table t2
                   WHERE t2.player_id = 123
                     AND t2.win_id <> 123 /* player 123 lost */
                 AND t2.id > t.id /* lost occur after the win we look at */
              )   

推荐阅读