SET @last_nid=-1;
SELECT vid,
IF(@last_nid = nid, @last_status, 0) AS last_status,
@last_status := status AS status,
@last_nid := nid AS nid
FROM node_field_revision
ORDER BY vid;
nid
とvid
は両方とも正の整数でstatus
、0 または 1 のいずれかです。
last_status
どのようにして-- になるのか完全に途方にNULL
暮れていますが、確かにそうです。
MySQL のマニュアルには次のように書かれています。
expr1 が TRUE (expr1 <> 0 および expr1 <> NULL) の場合、IF() は expr2 を返します。それ以外の場合は expr3 を返します。
まあ、最初は反復@last_nid
は等しくありませんnid
。なぜなら、一方が負で、もう一方が正だからです。したがって、0 が返されます。はい、@last_status
ここでは NULL ですが、返すことはできません。次に、0 または 1 のいずれか@last_status
の値を入力します。status
以降の反復では、@last_status
再び NULL になることはありません。
それでも、圧倒的多数の行には NULL があります@last_status
-@last_status
初期値を指定してもそれは起こりませんが、これは私の考えと私のクエリが偽物であることを意味しますが、なぜ/どのように?