2014-11-03 59 views
1

我可以簡化我的表結構爲這一問題的目的,爲以下:MySQL的 - 獲取行的最長鏈具有一定的價值

http://sqlfiddle.com/#!2/dcdd3/1

我想要得到的最長連勝爲每個用戶(即連續贏= 1個的最大行數無一勝績= 0行之間,在下面的格式返回:

user_id | win_streak 
-------------------- 
1  | 5 
2  | 3 
3  | 3 

目前的解決方案我是把所有的行和建結果一個PHP的foreach循環,但我無法幫助請求在MySQL中有這樣的方法。

回答

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勝。

+0

完美,謝謝! – tanGee 2014-11-03 16:32:29

0

看看這個以前的答案:

http://stackoverflow.com/questions/15484908/mysql-count-the-number-of-consecutive-times-a-value-appears 
相關問題