为了解决这个问题,我可以简化我的表结构:
http://sqlfiddle.com/#!2/dcdd3/1
我希望获得每个用户最长的连胜纪录(即最大数量的连续胜利= 1行,中间没有胜利= 0行,以下列格式返回:
user_id | win_streak
--------------------
1 | 5
2 | 3
3 | 3
我目前的解决方案是获取所有行并在PHP foreach循环中构建结果,但我不能认为有一种方法可以在MySQL中执行此操作。
答案 0 :(得分:1)
您需要一个定义胜利顺序的列。我假设这是auto_increment列id
:
select
user_id, max(wins) as longest_winning_streak
from (
SELECT
ugr.*
, @winstreak := if(@prev_user = user_id, if(won = 1, @winstreak + 1, 0), 1) as wins
, @prev_user := user_id
FROM `user_game_results` ugr
, (SELECT @winstreak := 0, @prev_user := null) var_init
ORDER BY user_id, id
) sq
group by user_id
您想要的结果不太正确,user_id连续3胜。
答案 1 :(得分:0)
看一下之前的答案:
http://stackoverflow.com/questions/15484908/mysql-count-the-number-of-consecutive-times-a-value-appears