Как и любая пользовательская переменная, @i имеет начальное значение NULL в начале сеанса, а затем NULL + 1 всегда дает NULL. NULL не 0.
Вы должны инициализировать @i: = 0, прежде чем он начнет подсчет.
Вы можете сделать это в отдельном заявлении:
SET @i:=0;
SELECT @i:[email protected]+1, s.*
FROM quiz.score s
WHERE id BETWEEN @a - @l1 AND @a + @l2 order by points desc;
Или другой трюк некоторых люди делают это, чтобы написать подзапрос, чтобы сделать это:
SELECT @i:[email protected]+1, s.*
FROM (SELECT @i:=0) AS _init
JOIN quiz.score s
WHERE id BETWEEN @a - @l1 AND @a + @l2 order by points desc;
Один последний путь вы могли бы решить первоначальный дело по умолчанию @i до 0 с COALESCE():
SELECT @i:=COALESCE(@i,0)+1, s.*
FROM quiz.score s
WHERE id BETWEEN @a - @l1 AND @a + @l2 order by points desc;
The COALESCE() функция возвращает первый аргумент, который не является NULL.
вам необходимо инициализировать @i – Tauseef