我有這個疑問:計數記錄失敗
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
。
我沒看到問題。 你能幫我嗎?
我有這個疑問:計數記錄失敗
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
。
我沒看到問題。 你能幫我嗎?
與任何用戶定義的變量一樣,@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。
是我forgott這一點。 thx尋求幫助。 –
您沒有設置@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;
您需要初始化@i – Tauseef