Я создал таблицу мест как:
seat status
1 y
2 y
3 n
4 n
5 n
6 y
7 n
8 n
9 n
10 n
11 n
12 y
13 y
14 n
15 n
, и я хочу найти три последовательных места для клиентов, основываясь на mysql5.7
, и я пытаюсь использовать user_variable, чтобы аннулироватьВложенный цикл, как это:
select seat - 2 begin, seat end
from (
select seats.seat, case when status = 'y' then @a := 0 else @a := @a + 1 end as a
from seats,
(select @a := 0) s) t
where a >= 3;
это работает хорошо.но я хочу полностью отсканировать таблицу только один раз. поэтому я пытаюсь выдвинуть переменную куда-то вроде этого:
select seats.*, @a, @s, @e
from seats , (select @a := 0, @s := -1, @e := -1) s
where
case when status = 'n' then @a := @a + 1
when status = 'y' then @a := 1
else null end; -- and
-- having @a=1
# case when @a > 3 then @s := seat else @s:= -1 end and
# case when @a > 3 then @e :
#
# = seat - 2 else @s:= -1 end ;
но: результирующий набор показывает
seat status @a @s @e
1 y 1 -1 -1
2 y 1 -1 -1
3 n 2 -1 -1
4 n 3 -1 -1
5 n 4 -1 -1
6 y 4 -1 -1
7 n 5 -1 -1
8 n 6 -1 -1
кажется, только работасначала нормально, так как установить переменную use в выражении where несколько раз?