2013-10-06 8 views
1

У меня есть этот запрос:Подсчет записей в SQL заявление терпит неудачу

SELECT @i:[email protected]+1, s.* 
FROM quiz.score s 
WHERE id BETWEEN @a - @l1 AND @a + @l2 order by points desc; 

@i:[email protected]+1 приращение shoult с каждой строки, но я получаю для каждой записи NULL.

Я не вижу проблемы. Не могли бы вы мне помочь?

+2

вам необходимо инициализировать @i – Tauseef

ответ

3

Как и любая пользовательская переменная, @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.

+0

да forgott что. thx за помощью. –

1

Вы не ставим @i, Так по умолчанию @i является NULL и любое значение + NULL = NULL попробовать

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; 
Смежные вопросы