как установить пользовательскую переменную в предложении where (mysql 5.7) - PullRequest
0 голосов
/ 03 февраля 2019

Я создал таблицу мест как:

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 несколько раз?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...