次の2つのリクエストの違いを誰でも説明できますか:
SET @foundnow=0;
SELECT id, (@foundnow:=IF(`id`=3,1,0)) as ff
FROM `sometable`
HAVING @foundnow=0
result is
id ff
1 0
2 0
3 1
と
SET @foundnow=0;
SELECT id, (@foundnow:=IF(`id`=3,1,0)) as ff
FROM `sometable`
HAVING ff=0
result is
id ff
1 0
2 0
4 0
5 0
...
最初に id=3 (含む) までのすべての行を指定し、次に id=3 を除くすべての行を指定するのはなぜですか?
この質問に関連しているのは、次のリクエストの「予期しない」動作だと思います
SET @tot=0;
SELECT @tot:=@tot+1 as `ff`
FROM `anytable`
HAVING (`ff`>10)
これにより、ff=12,14,16,18... の行が得られます。