我的表结构如下
ID user_id win
1 1 1
2 1 1
3 1 0
4 1 1
5 2 1
6 2 0
7 2 0
8 2 1
9 1 0
10 1 1
11 1 1
12 1 1
13 1 1
14 3 1
Run Code Online (Sandbox Code Playgroud)
我希望在mysql.like中为user_id = 1获得连续获胜(win = 1),对于user_id = 2(记录id = 5),它应该返回4(记录id 10,11,12,13),它应该返回1.
我可以在为每个用户重新审阅记录后在php中执行此操作,但我不知道如何使用查询到mysql来执行此操作.
使用php或mysql在性能方面也会更好.任何帮助将不胜感激.谢谢!!!
不确定您是否已设法使其他查询正常工作,但这是我的尝试,绝对有效 - Sqlfiddle来证明这一点。
set @x=null;
set @y=0;
select sub.user_id as user_id,max(sub.streak) as streak
from
(
select
case when @x is null then @x:=user_id end,
case
when win=1 and @x=user_id then @y:=@y+1
when win=0 and @x=user_id then @y:=0
when win=1 and @x<>user_id then @y:=1
when win=0 and @x<>user_id then @y:=0
end as streak,
@x:=user_id as user_id
from your_table
) as sub
group by sub.user_id
Run Code Online (Sandbox Code Playgroud)
如何让它在 PHP 页面上工作并进行测试以查看是否获得正确的结果如下,我还对查询进行了一些优化:
mysql_query("set @y=0");
$query=mysql_query("select sub.user_id as user_id,max(sub.streak) as streak
from
(
select
case
when win=1 and @x=user_id then @y:=@y+1
when win=0 and @x=user_id then @y:=0
when win=1 and @x<>user_id then @y:=1
when win=0 and @x<>user_id then @y:=0
end as streak,
@x:=user_id as user_id
from your_table
) as sub
group by sub.user_id");
while($row=mysql_fetch_assoc($query)){
print_r($row);}
Run Code Online (Sandbox Code Playgroud)