2013-10-06 106 views

回答

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; 

COALESCE()函數返回它第一個參數不是NULL。

+0

是我forgott這一點。 thx尋求幫助。 –

1

您沒有設置@i, 因此在默認情況@i爲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;